【发布时间】:2013-05-13 16:40:55
【问题描述】:
我有一个(为了清楚起见)聊天。
用户可以登录,写消息,其他人会看到[name]:[message]。
我不想每次写socket.emit('say', message);时都发送用户名和ID,因为那是多余的,所以我在服务器上做的事情是这样的:
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。
我想用一个 cookie 来保存用户的姓名和 ID,服务器会通过读取 cookie 知道它是哪个用户,但这有点丑陋的解决方案:每次都发送该信息是多余的.
我还可以(以某种方式)劫持“on”函数并添加可以知道用户身份的功能,因为无论如何所有“on”侦听器都必须驻留在“connection”侦听器中。
【问题讨论】:
-
不获取用户 ID。拿到插座。
socketevents.forEach(function(ev){ socket.on(ev.name, ev.fn.bind(socket)); }); -
@FizzyTea - 请把它写成完整的答案?我不明白你的答案的上下文..如何使用它。
-
这只是一个建议,因此是评论而不是答案。也许我应该更好地表达我只是猜测。你比我更了解你的代码库,所以如果你看不出它是如何应用到你身上的,那么也许这不是正确的方法。
标签: javascript node.js socket.io