我使用网络套接字,并且onclose
方法在服务器关闭时不会获得triggert。
我试图用progress.exit
手动关闭ws连接,但似乎这只在一个干净的出口上获得了triggert。
是他们在停止之前捕获已停止的nodejs app并执行代码的方法吗?
它应该在ctr
+ c
以及任何其他崩溃/退出时触发。
基本上我想告诉客户当连接不再存在时在他尝试做某事之前,因为onclose
并不是每个案例都有,我该怎么做才能检查连接?
我提出的唯一解决方案是不时ping服务器。
答案 0 :(得分:0)
因为这是不可能的,所以我开始将ping作为一个工作场所发送:
var pingAnswer = true;
pingInterval = setInterval(function(){
if(pingAnswer){
ws.send(JSON.stringify({type:'ping'})); //on the serverside i just send a ping back everytime i recive one.
pingAnswer = false;
}else{
clearInterval(pingInterval);
//reload page or something
}
},1000);
ws.onMessage(function(e){
m = JSON.parse(e.data);
switch(m.type){
....
case 'ping':
pingAnswer=true;
return;
}
}
);
答案 1 :(得分:0)
您没有提供显示如何定义on('close',...)
处理程序的代码段,但您可能错误地定义了处理程序。
在撰写本文时,websocket.onclose的文档使我首先将处理程序实现为ws_connection.onclose( () => {...});
,但我找到了正确的方法ws_connection.on('close', () => {...} );
也许ws文档中使用的样式是某种我不熟悉的习语。
我用节点6.2.1和ws 1.1.1测试了这个。当相应的一方通过 Ctrl + c 关闭或由于某种原因崩溃时,任何一方(服务器/客户端)都会触发on.('close',...)
回调(例如,用于测试,JSON.parse("fail");
或throw new Error('');
)。