需要给websocket加上重连机制,百度了很多教程,有加上心跳机制的,因为服务器每十秒会给客户端发数据,而且直接kill掉服务器进程,客户端会马上显示断开连接,我这里就没有加心跳机制。
var wsIp = 'ws://127.0.0.1:18060';
var sysConnect = 10000;
var numConnect = 0;
var socketstatusTask=null
sysSocketInit(wsIp);
function sysSocketInit(service){
socketstatusTask = new WebSocket(service);
socketstatusTask.onopen = function () {
console.log("已连接状态系统的socket服务器");
numConnect=0;
};
socketstatusTask.onmessage = function (msg) {
uni.$emit("socketstatusTask",msg)
};
socketstatusTask.onclose = function () {
console.log('系统状态服务器已经断开');
reconnectSys(service);
};
function reconnectSys(service) {
if(sysConnect>0){
sysConnect --;
numConnect ++;
console.log("第"+numConnect+"次重连");
setTimeout(function(){
sysSocketInit(service);
},10000);
}else{
console.log("系统状态服务器连接已超时");
}
}
}
代码如上,定义重连次数为10000次,心跳回应我注释了,不然会向服务器发送没必要的数据。一开始我没打开语音系统服务器,显示断开连接并且重连 打开语音服务器,重新连接成功,开始推送数据
关闭服务器,从新开始计数并尝试重连
|