在关联数组中进行双重索引

我正在使用Node.js构build一个服务器。 我将代表用户的对象存储在关联数组中,现在这些对象的索引是该连接的套接字标识。 使用Socket.io库,我通过简单地执行socket.id来获得它,因此对于每个处理程序来说,照顾我的请求,我总是可以知道哪个用户提出了请求。

客户端每个用户都有连接用户的id(与socket ID不同)。 问题araises当我有一个处理程序,用于发送消息从用户到另一个,我举个例子:

用户A需要发送一个消息给用户B,我的协议指定的消息是这样的:

MSG_KEY:{MSG:'hello world',USER_ID:'12345'} 

服务器端我有一个处理程序,侦听“MSG_KEY”,当消息发送它执行和使用socket.id我可以检索谁发出请求,但问题是,我需要也得到用户B但这次使用他的USER_ID。 我不想使用socket.id来避免会话欺骗。

我首先想到了在我的数组中的索引,通过从socket.id和用户ID索引它们的用户。

我的问题是:这样做是个好主意吗? socket.io提供了一个简化这个的方法吗?

没有特别的理由,你不能这样做。 我会使用两个单独的对象(地图),并可能有用户代表的对象而不是string,以便实际上只有一个用户(从两个地方引用)。

例如,用户:

 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;