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

5
我正在尝试使用sails.js设置一个系统,让服务器向一组客户端广播消息。基本上:
1. 组A中的客户端发送AJAX请求到服务器 2. 服务器处理请求并通过socket将消息发送给组B的所有客户端 3. 组B的客户端通过socket接收消息并显示内容。
根据socket.io文档,我应该能够让组B的客户端加入一个“房间”,然后让服务器向该特定房间广播,但在客户端方面,预先存在的“socket”没有方法“socket.join('room')”。因此,我尝试仅向所有客户端发送一个唯一事件:
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来指定组,但仍会向每个客户端发送事件。

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

1个回答

4
Sails的处理方式是使用一个模型来支持“Groups”,在控制器操作中使用一个socket订阅一个组,方法是 Group.subscribe(groupId, req.socket)。然后,您可以使用 Group.publish(groupId, data) 向特定的组发送消息。
您还可以在控制器中订阅任意房间名称,方法是使用 req.listen(groupId),并使用 req.broadcast(roomName, data) 广播到该房间。
所有这些都在Sails文档中有介绍,用于处理sockets的文档链接是:https://github.com/balderdashy/sails-docs/blob/0.9/sockets.md

1
请您能否提供更具体的示例。再多一些代码会很有用。在提供的链接中似乎找不到“Group”这个东西。 - Petar Vasilev
“Group”是示例中的模型名称。在文档中,它们被列为“Model.subscribe”,“Model.publish”等。 - sgress454

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接