在nodejs退出时不会调用ws.onclose事件

时间:2015-09-23 10:38:09

标签: node.js websocket

我使用网络套接字,并且onclose方法在服务器关闭时不会获得triggert。
我试图用progress.exit手动关闭ws连接,但似乎这只在一个干净的出口上获得了triggert。

是他们在停止之前捕获已停止的nodejs app并执行代码的方法吗? 它应该在ctr + c以及任何其他崩溃/退出时触发。

基本上我想告诉客户当连接不再存在时在他尝试做某事之前,因为onclose并不是每个案例都有,我该怎么做才能检查连接?

我提出的唯一解决方案是不时ping服务器。

2 个答案:

答案 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('');)。