Sails.js + socket.io:从服务器发送消息到客户端

我试图build立一个系统与sails.js让服务器广播消息到一组客户端。 基本上:

  1. A组中的客户端向服务器发送AJAX请求。
  2. 服务器处理请求并通过套接字将消息发送给B组的所有客户端。
  3. B组的客户端通过套接字接收消息并显示。

根据socket.io文档,我应该能够让B组中的客户端join一个“房间”,然后让服务器广播到特定的房间,但在客户端,预先存在的“套接字”不有方法“socket.join('房间')”。 所以,我试着给所有的客户发送一个独特的事件:

socket.on("connect", function(){ console.log("Client Connected"); }); socket.on("my_event", function(data){ console.log("my_event received"); }); 

这可以通过在服务器端执行“sails.io.sockets.emit(”my_event“,{…})”来正常工作,但是这不是将事件发送到每个客户端吗? 我可以使事件名称是唯一的,就像“my_event_000”带有一个ID来指定组,但是这仍然会不必要地将事件发送到每个客户端。

我应该使用“房间”吗? 如果是的话,怎么样?

Sails的方式是build立一个支持你的“Groups”的模型,在一个控制器动作中,一个套接字使用Group.subscribe(groupId, req.socket)来订阅一个组。 然后,您可以使用Group.publish(groupId, data)将消息发送到特定的组。

您还可以使用req.listen(groupId)在控制器中订阅任意房间名称,并使用req.broadcast(roomName, data)向该房间进行广播。

这些都在Sails文档中用于处理套接字 !