我正在使用Node.js构建服务器。我将表示我的用户的对象存储在关联数组中,现在这些对象的索引是该连接的套接字ID。使用Socket.io库我只需执行socket.id即可获得它,因此对于处理我的请求的每个处理程序,我总能知道哪个用户发出了请求。
客户端每个用户都有连接用户的ID(与套接字ID不同)。 当我有一个用于从用户向另一个用户发送消息的处理程序时,问题就出现了,我举了一个例子:
用户A需要向用户B发送消息,我的协议指定消息如下:
MSG_KEY:{MSG:'hello world',USER_ID:'12345'}
服务器端我有一个侦听“MSG_KEY”的处理程序,当发送消息时,它被执行并使用socket.id我可以检索谁发出了请求,但问题是我还需要得到用户B,但这次使用他的USER_ID。我不想使用socket.id来避免会话欺骗。
我首先考虑通过从socket.id和用户ID索引来为我的数组中的索引编制索引。
我的问题是:这样做是个好主意吗? socket.io是否提供了简化此操作的方法?
答案 0 :(得分:1)
没有特别的理由你不能这样做。我会使用两个单独的对象(地图),并且可能让用户由对象而不是字符串表示,因此实际上只有一个用户(从两个地方引用)。
,例如,用户:
var user = {userid: "JohnD", name: "John Doe"};
然后:
var usersByID = {};
usersByName[user.userid];
和
var usersBySocket = {};
usersBySocket[theSocketID] = user;
甚至
var users = {
byID: {},
bySocket: {}
};
users.byID[user.userid] = user;
users.bySocket[theSocketID] = user;