Node.js Socket.IO:推送到客户端组

Node.js Socket.IO:推送到客户端组,node.js,express,client,socket.io,grouping,Node.js,Express,Client,Socket.io,Grouping,我将Node.js服务器与Express一起使用,并希望执行以下操作: 客户端调用带有ID的URL(例如,localhost/show/:projectID) 每个调用相同ID的客户端都应该进入相同的“组” 新消息应该只推送到同一“组”中的客户端,而不是用另一个ID调用URL的客户端 如何在Socket.IO中实现这一点?(我已经读过关于“房间”的书,但我不知道如何将它们与URL一起使用)在尝试了一点。握手之后,我找到了一个类似GeoPhoenix建议的解决方案。 我不知道我的解决方案有多好

我将Node.js服务器与Express一起使用,并希望执行以下操作:

  • 客户端调用带有ID的URL(例如,
    localhost/show/:projectID
  • 每个调用相同ID的客户端都应该进入相同的“组”
  • 新消息应该只推送到同一“组”中的客户端,而不是用另一个ID调用URL的客户端

如何在Socket.IO中实现这一点?(我已经读过关于“房间”的书,但我不知道如何将它们与URL一起使用)

在尝试了一点
。握手之后,我找到了一个类似GeoPhoenix建议的解决方案。
我不知道我的解决方案有多好,但它是有效的。代码如下:

io.sockets.on('connection', function (socket) {
  var ref = JSON.stringify(socket.handshake.headers.referer);
  socket.join(ref);
  io.sockets.in(ref).emit('news', {hello: "world"});
});

一旦客户机连接到他使用的URL,他将被保存到
ref
中,并加入一个以该URL命名的文件室(当然可以进一步处理该URL以获得更好的文件室名称,但这不是解决方案工作所必需的)。

您可以尝试使用HTTP Referer和名称空间,但您真正需要的是使用
.handshake
,以便使用framework和socket.io之间的会话,授权使用唯一ID访问该项目,如果项目ID位于会话变量
isMemberIn
,则通常会授予访问权限,当然这可能会发生变化。。