我在一台计算机上使用带有Node JS的Einaros WS模块,当我使用另一台计算机连接时它可以正常工作.(server)
(client)
如果我插上网线,ws.on('close', function()...
它不会开火,我正在寻求建议是否:
我必须实现自己的ping/pong,或者
有一个内置功能可以自动处理.
Praneeth Wan.. 16
Einaros WS确实能够发送大多数浏览器和套接字框架都能理解的Ping和Pong帧.我已经在iOS上测试了Socket Rocket,它对于Einaros的Ping帧没有任何问题.你必须提出应用程序特定的逻辑,用于ping的频率,以及你能容忍多少错过的pong.Einaros WS有ping()和pong()函数来发送ping或pongs.您收听"pong"事件以了解您何时收到客户的回复.以下是我在代码中执行此操作的方法:
wss.on("connection", function(ws) { console.log("websocket connection open"); ws.pingssent = 0; var interval = setInterval(function() { if (ws.pingssent >= 2) {// how many missed pings you will tolerate before assuming connection broken. ws.close(); } else { ws.ping(); ws.pingssent++; } }, 75*1000);// 75 seconds between pings ws.on("pong", function() { // we received a pong from the client. ws.pingssent = 0; // reset ping counter. }); });
在Socket Rocket的情况下,客户端不需要代码.因此兼容的浏览器和客户端将自动响应Pongs.
Einaros WS确实能够发送大多数浏览器和套接字框架都能理解的Ping和Pong帧.我已经在iOS上测试了Socket Rocket,它对于Einaros的Ping帧没有任何问题.你必须提出应用程序特定的逻辑,用于ping的频率,以及你能容忍多少错过的pong.Einaros WS有ping()和pong()函数来发送ping或pongs.您收听"pong"事件以了解您何时收到客户的回复.以下是我在代码中执行此操作的方法:
wss.on("connection", function(ws) { console.log("websocket connection open"); ws.pingssent = 0; var interval = setInterval(function() { if (ws.pingssent >= 2) {// how many missed pings you will tolerate before assuming connection broken. ws.close(); } else { ws.ping(); ws.pingssent++; } }, 75*1000);// 75 seconds between pings ws.on("pong", function() { // we received a pong from the client. ws.pingssent = 0; // reset ping counter. }); });
在Socket Rocket的情况下,客户端不需要代码.因此兼容的浏览器和客户端将自动响应Pongs.