当用户关闭浏览器时检测Websocket关闭连接?

wil*_*lly 5 javascript websocket node.js

我在我的项目中使用 HTML5 websocket 和 nodejs 来创建一个简单的聊天。

到目前为止,一切都按预期进行。

但是,我需要弄清楚如何检测已连接的用户是否以某种方式失去连接,特别是他们是否关闭浏览器等。

我尝试了以下代码。

我可以像这样成功连接:

wss.on('connection', function(ws, req) {

//do my stuff here/////
console.log('connection started');

});
Run Code Online (Sandbox Code Playgroud)

但是,当我通过关闭浏览器断开连接时,我在控制台中看不到任何内容。

我使用此代码来检测连接关闭:

wss.on('closed', function(ws) {
        console.log('connection closed');
});
Run Code Online (Sandbox Code Playgroud)

如果我遗漏了什么或做错了什么,有人可以告诉我吗?

提前致谢。

编辑:

这似乎有效:

  ws.on("close", function() {
    console.log("closed");
  });
Run Code Online (Sandbox Code Playgroud)

小智 3

正如本文中所讨论的,默认的 Websocket 实现无法检测网络断开连接,只能检测与用户的故意断开连接。我建议您尝试使用Socket.IO,因为它会执行与您正在寻找的类似的操作,并且可以检测断开连接。这是一个例子:

var io = require('socket.io')(80);

io.on('connection', function (socket) {
    socket.on('disconnect', () => {
        console.log('User disconnected.')
    });
Run Code Online (Sandbox Code Playgroud)

使用 Socket.IO 的一个缺点是,您必须在客户端上使用 JS 库,而不是使用原始 WebSocket,但您将能够查看客户端何时断开连接。