node.js 在断开连接事件时不发送套接字

标签 node.js socket.io disconnect

当有人连接到 Node 服务器时,我会保留一个包含所有套接字的数组。 这样我就可以在需要的时候向每个人广播消息,或者循环访问用户来计算在线用户的数量等。

所有这些都可以正常工作,但是当触发断开连接事件时,我的参数中没有收到套接字。 还有其他方法可以知道哪个套接字刚刚断开连接吗?

var allClients = [];

io.sockets.on('connection', function(socket) {
   allClients.push(socket);

   socket.on('disconnect', function(socket) {
      console.log('Got disconnect!');

      var i = allClients.indexOf(socket);
      delete allClients[i];
   });
});

当然上面的例子不起作用,因为断开事件没有给出套接字参数(或任何其他参数)。 那么在断开连接之前是否还有另一个事件在套接字仍然存在的情况下触发?

阿里

最佳答案

您已经拥有套接字,因为断开连接处理程序是在“连接”事件范围内声明的。尝试删除您传递给“断开连接”处理程序的参数,您应该能够使用连接处理程序中的套接字参数。

io.sockets.on('connection', function(socket) {
   allClients.push(socket);

   socket.on('disconnect', function() {
      console.log('Got disconnect!');

      var i = allClients.indexOf(socket);
      delete allClients[i];
   });
});

除此之外,您不需要套接字数组来广播,您可以使用房间对套接字进行分组并广播到该房间内的所有套接字。

关于node.js 在断开连接事件时不发送套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9868846/

相关文章:

json - 如何使用 Mongoose 将 json 导入 MongoDB

javascript - 将 JSON 值转换为数组

node.js - SocketIO 与客户端和服务之间的网关通信?

javascript - 使客户端在选项卡关闭 node.js 上发送断开连接事件

Node.js 和 Gulp 帮助

javascript - 错误 : collection name must be a String in node js

node.js - Node.js 应用程序中的代码执行顺序

Jquery UI 可排序的索引更改重新排序列表

GDB + CLion + STM32f4 + OpenOCD -> gdb 错误,远程 'g' 数据包中的寄存器 16 被截断

python - Django channel websocket在握手后断开连接