开发平台:普元eos(封装eclipse)
先上代码:后端代码如下:
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import com.eos.runtime.core.TraceLoggerFactory;
import com.eos.system.logging.Logger;
@ServerEndpoint("/webSocket")
public class WebSocketHandler{
// 打印日志使用
Logger log = TraceLoggerFactory.getLogger(WebSocketHandler.class);
private static ConcurrentHashMap<String, Session> webSocketSessionMap = new ConcurrentHashMap<String, Session>();
public WebSocketHandler(){
log.info("Websocket创建" + new Date().getTime());
}
@OnOpen
public void onOpen(Session session){
log.info("webSocket连接成功" + new Date().getTime());
}
@OnClose
public void onClose(Session session){
log.info("close...." + new Date().getTime());
}
@OnError
public void onError(Session session, Throwable error) {
log.info("webSocket服务关闭" + new Date().getTime());
log.info(error.getMessage());
}
@OnMessage
public void onSend(Session session,String msg){
try {
session.getBasicRemote().sendText(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
// 由后端业务代码调用
public void sendMessage(String toUserId,String msg) throws Exception{
if(ObjectUtil.isNotEmpty(webSocketSessionMap.get(toUserId))){
onsend(webSocketSessionMap.get(toUserId), msg);
}
}
}
前端代码如下:
// 有项目路径时,在端口号后面添加即可
var url = "ws://localhost:8080/webSocket"
var ws = new WebSocket(url);
ws.onopen = function(e) {
console.info("连接创建" + new Date().getTime());
};
ws.onmessage = function (e) {
console.info("接收到消息" + new Date().getTime());
};
ws.onclose = function(e) {
console.info("连接关闭" + new Date().getTime());
};
ws.error = function(e) {
console.info("连接失败" + new Date().getTime());
};
// 前端主动向后端发送消息
ws.send();
// 前端关闭连接
ws.close();
1."var ws = new WebSocket(url);"执行时
后端构造方法WebSocketHandler()执行---->
后端@OnOpen注解方法执行---->
前端ws.onopen执行---->
连接创建成功
2.前端调用"ws.close();"
后端@OnClose注解方法执行---->
前端ws.onclose执行(参数中包含关闭状态码)---->
连接关闭
3.前端调用"ws.send();"
后端@OnMessage注解方法执行---->
前端ws.onmessage执行---->
数据发送成功
4.直接停止tomcat服务
后端@OnClose注解方法执行---->
前端ws.onclose执行(参数中包含关闭状态码)---->
连接关闭