npm ws(websocket)在一段时间后自动关闭

时间:2017-01-31 06:19:46

标签: node.js web-services sockets npm websocket

我在node.js项目中使用ws npm包进行套接字编程

这是我的代码......

var server = require('ws').Server;


var serverConnection = new server({port : 5000});

serverConnection.on('connection',function(ws){

    console.log('websocket is created on at ws://{{IP_ADDRESS}}:5000');

    ws.on('message',function(requestedString){

      var iCounter = 0;

      function doSetTimeout() {

         if(ws.readyState == 1)
         {
             iCounter = iCounter + 1;

             socketData = {'index' : iCounter}

             ws.send(JSON.stringify(socketData),function ack(error){

                  if(error){  
                      console.log("Occure error in socket");
                      console.log("error : "+error);
                  } 
             });
         }

         if(ws.readyState == 1)
         { 
              setTimeout(function() { 
                  doSetTimeout(i); 
              }, 15000);
         }

      }
  });

  ws.on('close', function close() {
      console.log('disconnected SOCKET - PORT : 5000');
  });
});

在我的程序代码示例中,您可以看到它增加iCounter的值并在每15秒后返回...

所以当它获得此输出时,有时会自动关闭连接。我为websocket播下了一些类似的问题。并且人们说websocket有一些超时,所以在npm ws包套接字中,如何增加超时。还是有任何其他问题自动关闭我的websocket ???

首先,抱歉我的英语不好..&请帮帮我..

1 个答案:

答案 0 :(得分:0)

首先,您需要的是:检测连接关闭的原因。在关闭时检查event.code。检查https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent中的代码 (在服务器和客户端上选中此选项)

可能需要在服务器ws.ping()上使用以维护连接。 (某些服务器/代理在60秒钟不活动后会断开连接)

因此,添加

serverConnection.on('connection',function(ws){
  let interval = setInterval(function(){ws.ping()}, 50e3)
  ws.on("close", function(ev) {
    clearInterval(interval);
    console.log('disconnected SOCKET - PORT : 5000, reason: 'ev.code);
  })
}