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

时间:2013-09-06 00:50:23

标签: node.js sockets sails.js

我正在尝试使用sails.js建立一个系统,让服务器向一组客户端广播消息。基本上是:

  1. A组中的客户端向服务器发送AJAX请求。
  2. 服务器处理请求并通过套接字向B组的所有客户端发送消息。
  3. B组的客户端通过套接字接收消息并显示内容。
  4. 根据socket.io文档,我应该可以让B组中的客户端加入“房间”,然后将服务器广播到该特定房间,但在客户端,预先存在的“套接字”没有方法“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 个答案:

答案 0 :(得分:4)

Sails执行此操作的方法是让模型支持“Groups”,并在控制器操作中使用套接字订阅具有Group.subscribe(groupId, req.socket)的组。然后,您可以使用Group.publish(groupId, data)向特定群组发送消息。

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

这都在Sails documentation for working with Sockets