Javascript JS Socket.io为()循环断开连接
我有这个东西Javascript JS Socket.io为()循环断开连接,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我有这个东西 obj = { 'Users': [ 'idxx1', 'idxx2', 'idxx3', 'idxx4', 'idxx5', 'idxx6' ], 'Room1': [ 'idxx1', 'idxx2', 'idxx3', 'idxx4', 'idxx5' ] } 我可以通过以下方式查看Room1的内容: console.log(io.sockets.manager.rooms['Room1']); 结果: [ 'idxx1', 'idxx2', 'idxx3', 'idxx
obj = { 'Users': [ 'idxx1', 'idxx2', 'idxx3', 'idxx4', 'idxx5', 'idxx6' ], 'Room1': [ 'idxx1', 'idxx2', 'idxx3', 'idxx4', 'idxx5' ] }
我可以通过以下方式查看Room1
的内容:
console.log(io.sockets.manager.rooms['Room1']);
结果:
[ 'idxx1', 'idxx2', 'idxx3', 'idxx4', 'idxx5' ]
idxx1
idxx2
idxx3
idxx4
idxx5
我可以使用for()循环分别获取每个值:
结果:
[ 'idxx1', 'idxx2', 'idxx3', 'idxx4', 'idxx5' ]
idxx1
idxx2
idxx3
idxx4
idxx5
但当我尝试断开插座时:
for( var key in obj ) {
io.sockets.sockets[obj[key]].disconnect();
}
(是的,我使用的是Sockets.io 0.9.16而不是v1+,并使用旧的断开方法)
它将每秒断开一次连接,例如:
idxx1
idxx3
idxx5
任何值得赞赏的想法看来出现问题的原因是
.disconnect()
方法从obj
数组中删除了一个元素(实际上它从io.sockets.manager.rooms['Room1']
数组中删除了一个元素,这反映在obj
上)
因此在第一次迭代中,obj
等于['idxx1'、'idxx2'、'idxx3'、'idxx4'、'idxx5']
和key
等于0
,并且idxx1
被删除。没关系
但是在第二次迭代中,obj
等于['idxx2','idxx3','idxx4','idxx5']
和key
是1
和obj[1]
等于idxx3
。这就是为什么我认为,idxx2
被跳过的原因。这同样适用于idxx4
我看到了以下解决方案——使用for
循环(而不是for in
)以相反顺序迭代obj
:
或者对每个迭代使用零索引:
for (var i = 0, length = obj.length; i < length; i++) {
io.sockets.sockets[obj[0]].disconnect();
}
for(变量i=0,长度=obj.length;i
这很有道理,没有考虑到断开连接时会删除idxxx
。又像个迷人的家伙一样工作了!