2

我正在使用 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 是否提供了一种简化方法?

4

1 回答 1

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;
于 2013-05-15T18:24:17.577 回答