一:
1、webosocket与socket
?websocket属于应用层协议 ?socket属于传输层协议 ?socket相当于一组接口,当两台主机进行通信时候,必须通过此API利用TCP/IP协议建立连接?
2、websocket与http
websocket是HTTP5新增的协议,实现了浏览器和服务器全双工通信,能节省服务器资源和带宽实现实时通信 两者基于TCP/IP,且都是应用层协议 websocket是全双工,http是单向的 websocket需要握手建立连接
二: 基于tomcat7.5+对websocket的实现 服务器端API,访问:ws://[IP或域名]:[server端口]/websocket
@ServerEndpoint(value = "/websocket")
public class WebSocketSync {
? ? private static CopyOnWriteArraySet<WebSocketSync> webSocketSet = new CopyOnWriteArraySet<WebSocketSync>();
? ? private Session session;
? ? @OnOpen
? ? public void OnOpen(Session session){
? ? ? ? this.session = session;
? ? ? ? webSocketSet.add(this);
? ? }
? ? @OnClose
? ? public void OnClose(){
? ? ? ? this.session = session;
? ? ? ? webSocketSet.remove(this);
? ? }
? ? @OnError
? ? public void OnError(Session session, Throwable error){
? ? ? ? logger.error(error.getMessage());
? ? }
? ? @OnMessage
? ? public void OnMessage(String msg){
? ? ? ? logger.info("收到消息:{}", msg);
? ? }
? ? public void sendMessage(String message) {
? ? ? ? for (WebSocketSync webSocketSync : webSocketSet){
// ? ? ? ? ? ?logger.info("广播消息:{}",message);
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? webSocketSync.session.getBasicRemote().sendText(message);
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }}
}
客户端API
var ws = new WebSocket(“ws://[IP或域名]:[server端口]/websocket”);?
? ? ws.onopen = function(){
? ? ? ? ws.send("Test!");
? ? };
? ? ws.onmessage = function(evt){
? ? ? ? console.log(evt.data);
? ? ? ? ws.close();
? ? };
? ? ws.onclose = function(evt){
? ? ? ? console.log("WebSocketClosed!");
? ? };
? ? ws.onerror = function(evt){
? ? ? ? console.log("WebSocketError!");
? ? };
|