我在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 ???
首先,抱歉我的英语不好..&请帮帮我..
答案 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);
})
}