我有一个(为了清楚起见)聊天。
用户可以登录,写消息,其他人会看到[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”侦听器中。