socket.io没有使用默认的命名空间/房间功能

时间:2016-08-27 03:10:46

标签: javascript node.js sockets socket.io

我发现为这样的多个端点设置自己的自定义路径更容易

服务器端:

io.on('connection', function(client) {

  var username = client.handshake.headers.users[0].username;

  client.on(username+'_con1', function(data) {
      io.emit(username+'_con1',data);
  });

  client.on(username+'_con2', function(data) {
      io.emit(username+'_con2',data);
  });

}

上述方法是否正确?至少我能够使它发挥作用。

2 个答案:

答案 0 :(得分:1)

取决于你的意思是正确的。这将为客户创建多个事件。

很难说这是没有任何背景的最佳/正确方式。但你应该查看名称空间和房间,并自己决定! http://socket.io/docs/rooms-and-namespaces/

答案 1 :(得分:1)

为每个客户端创建唯一的消息名称使得您似乎计划向所有客户端发送消息,并且只有一些客户端将监听针对它们的消息。这不是一种非常有效的做事方式。

socket.io中的房间的设计使您可以拥有一个公共消息名称(不需要为每个客户端提供唯一的消息名称),然后仅将该消息发送给它所针对的客户端。这是一个更有效的方案。

现在,当然,您可以为每个客户端创建唯一的消息名称,然后只将其发送到所需的客户端,但为什么还要担心唯一消息名称的额外复杂性。如果您只是将消息发送给目标客户,则不需要它。

所以,你当然可以使你的计划有效,但它似乎不是最简单的做事方式,而且根据你实施的其他细节,它可能不是最有效的方法。事情要么。

命名空间更像是连接到特定频道。客户端决定他们想要连接到哪个频道。然后,服务器决定将给定消息发送到哪个名称空间。

房间是服务器订阅客户端的东西,以便能够轻松地向特定客户端发送相同的消息,或者在某些情况下,从一个客户端与一个房间中的所有其他客户端共享传入消息(喜欢聊天)。