WebSocket客户端链接不上和掉线的问题以及解决方案

看到最近有不少人在blog上问关于WebSocket客户端链接和掉线的问题,有一部分我之前也遇到过,在这里我罗列了一些我之前遇到过的问题和其余简单的WebSocket服务。web

 

Q1 客户端链接不上的问题后端

   这个问题我遇到的基本集中在后端,遇到的话须要收集日志进行分析,首先要查看是由于什么缘由出现问题的,不过这种状况下多半会出现ExceptionException着手分析问题便可浏览器

 

Q2 1客户端掉线问题服务器

   这里所指的客户端掉线的问题是指客户端非正常掉线有的时候会出现Exception经过处理Exception便可关闭链接有的时候像客户端忽然网络离线的状况下这个时候后台没有收到客户端发来的close frame会认为这个客户端仍是处在在线的状况那这个问题能够经过心跳包的问题解决也能够经过客户端向服务器发心跳包也能够服务器发送心跳包至客户端咱们最终采用的方案是客户端向服务端发送心跳包服务端收到心跳包后会检测当前websocket session队列中是否存在同属性的websocket session有的话关闭之前的session便可我我的认为仍是服务端像客户端发送心跳包好一些但这样作要注意性能问题。websocket

 

Q3 websocket链接后1分钟自动断开关闭网络

   这是由于websocket长链接有默认的超时时间(1分钟,由proxy_read_timeout决定),就是超过必定的时间没有发送任何消息,链接会自动断开。解决办法就是让浏览器每隔必定时间(要小于超时时间)发送一个心跳。代码以下:session

window.setInterval(function(){ //每隔5秒钟发送一次心跳,避免websocket链接因超时而自动断开
var ping = {"type":"ping"};
ws.send(JSON.stringify(ping));
},5000);
socket

Q4 能收到客户端消息后台也显示发送可是客户端收不到 
   这个问题经我我的观察和猜想应该是websocketsession没有成功关闭或者成功关闭可是和一个websocketsession对应多个session有关由于我把上面的问题解决了以后这个问题也没出现过了
性能

 

   最近由于工做需求较多,又有新项目要进来,项目周期太紧了,通过团队商量,本身开发WebSocket这一块,要作稳定成本过高了,因此咱们决定使用第三方的WebSocket服务,通过咱们对比多个第三方服务,最终发现了一个Java websocket神器叫GoEasy,相比较其余的三方,我以为这个上手更加简单,对各类浏览器的兼容也很是好。用到如今也没有什么问题,大家有兴趣的能够去试一下。spa

   网址:http://www.goeasy.io

   但愿我遇到的问题以及解决方案对大家有所帮助。

相关文章
相关标签/搜索