私はNode.jsとSocket.ioで小さなチャットアプリケーションを書いています。私はオブジェクト、connections
を持っています。このオブジェクトは、すべてのライブ接続への参照を保持しています。 (擬似コード):Node.jsのConcurrent Modificationについて心配する必要はありますか?
for (var i=0; i<connections.length; i++) {
// do something with connections[i] // (3)
}
質問:私は、接続オブジェクトを反復処理するコード、例えばの別の部分で今
var connections = {};
...
io.on("connection", function(socket)){
connections[socket.id] = socket; // (1)
socket.on("disconnect", function(){
delete connections[socket.id]; // (2)
});
}
ソケットのdisconnect
イベントは、アイテムを削除する恐れがあります(2)
ループが実行されている間にconnections
オブジェクトから(3)
とエラーをスローしますか?もしそうなら、ベストプラクティスは何ですか?
私はそれを削除するマークをつけることができ、ループの完了後に削除するだけですが、それは必要ですか?ありがとう!
いいえ、JavaScriptはシングルスレッドです。ループが実行されているときは、他のコードを実行することはできません。 – Paulpro