如果我有一个全局数组:
var users = new Array();
我想在我所有的客户中维护这个数组:
socket.on('connect', function() {
users.push(socket.id);
});
socket.on('disconnect', function() {
users.splice(users.indexOf(socket.id), 1);
});
如果我有另一个函数怎么办:
socket.on('new_score', function(s) {
for (u in users) {
...
do some processing
...
io.sockets.connected[users[u]].emit('new_score', socket.id, s);
...
do some processing
...
}
});
由于 socket.io 是异步的,当我在最后一个函数中调用 emit 时,用户可能已在断开连接中被删除。
所以我需要一种方法来安全地访问数组,所有这些其他函数都异步操作它......
最佳答案
如果整个 for
循环是同步的(或者不依赖于异步函数的结果),则您无需担心。
整个循环将在同一个“tick”中处理,任何消息(如 disconnect
)都将在 tick 结束时处理。
关于javascript - 如何在 socket.io 中锁定全局数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37880796/