(わかりやすくするために)チャットがあります。
ユーザーはログインしてメッセージを書くことができ、他のユーザーは[name]:[message]
.
冗長であるため、書き込むたびにユーザーの名前とIDを送信したくないsocket.emit('say', message);
ので、サーバーで行っていることは次のようになります。
var io = require("socket.io").listen(server),
sockets = {};
io.sockets.on('connection', function (socket){
socket.on('savePersonToSocket', function(user){
socket.user = user;
sockets[user.id] = socket;
}
socket.on('doSomething', doSomething);
});
// must be outside of 'connection' since I have TONS of these in a much more
//complex structure and I don't want to create them all per user connection.
function doSomething(){
...
sockets[userID].emit('foo'); // how to get the userID at this point?
...
}
では、その時点でユーザー ID を取得するにはどうすればよいでしょうか。
ノート:
- Facebook アカウントにログインして接続するユーザーごとに、クライアントはサーバーにその人の名前と ID を保存するように指示します。
私は、ユーザーの名前と ID を保存する Cookie を使用してそれを行うことを考えました。サーバーは Cookie を読み取ることでどのユーザーであるかを知ることができますが、これは少し見苦しい解決策です。その情報を毎回送信するのは冗長です。
また、「on」関数を (何らかの方法で) ハイジャックし、それがどのユーザーであるかを知る機能を追加することもできます。これは、すべての「on」リスナーがいずれにしても「connection」リスナー内に存在する必要があるためです。