2

ソケットをオブジェクトにマップする必要があるアプリケーションを作成しています。Socket.IO が提供する socket.id 変数を使用すると安全だと思いました。残念ながら、デバッグ中に、クライアントの切断/再接続などを行わずに socket.id が変更されたことがわかりました。

私がやろうとしていることを示す小さなコードは次のとおりです。

var io         = require('socket.io').listen(8080),
var myVariable = new Array();

// Main event loop
io.sockets.on('connection', function (socket) {
    socket.on('myEvent', function(data) {
        myVariable[socket.id] = data;
    }
    // 'someOtherEvent' which uses the mapped data.
    socket.on('someOtherEvent', function(data) {
        // Doesn't always work because socket.id has changed and var is empty
        doSomethingWith(myVariable[socket.id]);
    }
});

よくわかりませんが、これは望ましい効果ではないと思います。なぜこれが起こるのですか?どうすれば回避できますか?

4

2 に答える 2

4

node-inspectorを使用してアプリケーションをデバッグしていましたが、ブレークポイントでコードを保持していたため、クライアントが切断されました (おそらくクライアント側のタイムアウト)。そのため、コードの実行を続けると、新しい socket.id を取得しました。

于 2012-08-20T13:31:39.297 に答える
0

「myEvent」またはソケットが再接続される前に「someOtherEvent」が発行されたようです。本番環境の 2 つの異なるプロジェクトで socket.id を接続識別子として使用していますが、問題なく動作します。

于 2012-08-13T15:57:45.277 に答える