一:
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!");
};