2016-07-12 8 views
0

私は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)とエラーをスローしますか?もしそうなら、ベストプラクティスは何ですか?

私はそれを削除するマークをつけることができ、ループの完了後に削除するだけですが、それは必要ですか?ありがとう!

+1

いいえ、JavaScriptはシングルスレッドです。ループが実行されているときは、他のコードを実行することはできません。 – Paulpro

答えて

2

ノードは、コードをシングルスレッドで実行する必要はありません。反復処理中に実行する操作が同期的である限り、socket.ioコールバックはインターリーブされません。

3

リスクはありません。

JSプロセスはシングルスレッドであり、ループが完了するまでコールバックをトリガーしません。

関連する問題