如何在socket.io中locking全局数组
如果我有一个全局数组:
var users = new Array();
我想在所有的客户中维持这个arrays:
socket.on('connect', function() { users.push(socket.id); }); socket.on('disconnect', function() { users.splice(users.indexOf(socket.id), 1); });
如果我有另一个function呢?
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是asynchronous的,在我最后一个函数发出的时候,用户可能已经被断开连接。
所以我需要一种方法来安全地访问数组与所有这些其他functionasynchronous操纵它…
如果整个for
循环是同步的(或不依赖于asynchronous函数的结果),那么您无需担心。
整个循环将在同一个“打勾”中处理,任何消息(如disconnect
)将在打勾结束时处理。