当有人连接到节点服务器时,我会保留一个包含所有套接字的数组。
这样我就可以在需要时向每个人广播消息,或者循环用户来计算在线用户的数量等。
所有这些工作正常,但是当触发断开连接事件时,我在参数中没有收到套接字。
还有另一种方法可以知道哪个套接字刚刚断开连接吗?
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];
});
});
当然,上面的示例不起作用,因为断开连接事件没有给出套接字参数(或任何其他参数)。
那么,在套接字仍然存在的情况下,在断开连接之前是否还会触发另一个事件?
Ali
您已经拥有套接字,因为断开连接处理程序是在“连接”事件范围内声明的。尝试删除传递给“断开连接”处理程序的参数,您应该能够使用连接处理程序中的套接字参数。
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];
});
});
除此之外,您不需要套接字数组来进行广播,您可以使用房间对套接字进行分组并向该房间内的所有套接字进行广播。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)