socket.io而不使用默认名称空间/房间function

我发现为这样的多个terminal设置自己的自定义path更简单

服务器端:

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); }); } 

以上方法是否正确? 至less我能够使它工作。

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

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

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

socket.io中的房间devise为可以使用一个通用的消息名称(不需要为每个客户端设置一个唯一的消息名称),然后只将消息发送给预期的客户端。 这是一个更有效率的scheme。

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

所以,你当然可以使你的scheme工作,但它似乎并不是这样做的最简单的方法,根据你的实现的其他细节,它可能不是最有效的方式来做事情。

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

一个房间是一个服务器订阅一个客户端的东西,以便于发送一组特定的客户端相同的消息,或在某些情况下分享一个客户端与一个房间中的所有其他客户端的传入消息(如聊天)。