关联数组中的双索引

时间:2013-05-15 18:21:50

标签: javascript node.js indexing hashmap socket.io

我正在使用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是否提供了简化此操作的方法?

1 个答案:

答案 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;
相关问题