ソケットをオブジェクトにマップする必要があるアプリケーションを作成しています。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]);
}
});
よくわかりませんが、これは望ましい効果ではないと思います。なぜこれが起こるのですか?どうすれば回避できますか?