1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > WebSocket 实现断线重连 详细代码 项目源码

WebSocket 实现断线重连 详细代码 项目源码

时间:2023-04-25 01:40:24

相关推荐

WebSocket 实现断线重连 详细代码 项目源码

小项目源码/chen_yan_ting/web-socket_dou_di_zhu

实现原理:

WebSocket的onClose 连接关闭回调方法webSocket.onclose()

重新新建WebSocket() 建立一个连接 但是连接参数一模一样和原来的一模一样

后端的OnOpen()方法创建新的session 找到客户端对应对象 把对象里面的session替换成新的就实现重连了

//连接关闭回调方法webSocket.onclose = function () {console.log("连接关闭")console.log("尝试重连")reconnecting()}function reconnecting() {webSocket = new WebSocket("ws://" + ip + ":9000/api/websocket/" + roomid + "/" + sid);//监听服务器发送的消息webSocket.onmessage = function (e) {// console.log("收到消息");// console.log(e.data);if (e.data[0] === 'P') {parsePoker(e.data);}if (e.data[0] === 'W') {win(e.data)}}//连接关闭回调方法webSocket.onclose = function () {console.log("连接关闭")console.log("尝试重连")reconnecting()}}

后端WebSocket的@OnOpen方法监控连接建立

@OnOpenpublic void onOpen(Session session, @PathParam("roomid") String roomid, @PathParam("sid") String sid) {

每次连接建立都会有一个新的Session,这个Session就是和相应客户端通信的关键

// 存放每个客户端对应的MWebSocketServer对象private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<>();

CopyOnWriteArraySet 用于存储所有连接的客户端

所以可以遍历webSocketSet 通过重新建立连接传来的sid匹配原来断开连接的WebSocketServer 把WebSocketServer里面的session替换成新的session

for (WebSocketServer item : webSocketSet) {// 找对应的客户端的对象 里面存着对应客户端的数据if (item.roomid.equals(roomid) && item.sid.equals(sid) {System.out.println("重连运行");// 数据不变 只改session 就是通信变了item.session = session;reconnect = true;} }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。