尝试将socket.io消息广播到例如所有连接的套接字。房间

时间:2014-09-24 14:07:47

标签: node.js socket.io sails.js broadcast

挑战:

我想使用 SailsJS ,并且能够通过socket.io加入一个房间,并从这个房间接收未经请求的消息,而不仅仅是当一个人进入或离开房间但是也收到物品。

因此有几个客户端连接到服务器。 然后广播(从服务器发起)消息/对象到每个房间,从而在这个房间里连接插座。

我可能只是给每个连接的套接字发送一条消息,但是非常想要一个关于如何使用SailsJS 0.10执行此操作的示例,以及使用SailsJS 0.10方式的优雅方法。

我在看https://github.com/balderdashy/sailsChat,但我认为这是接近模型本身,例如:autosubscribe:['destroy','update']

在我看来,这应该更松散地耦合,而不是与模型本身联系在一起。

提前致谢!

2 个答案:

答案 0 :(得分:0)

SailsChat示例的目的是演示当您主要关注发送有关模型的消息时Sails JS resourceful pubsub如何从插槽消息中解决很多麻烦。您可以使用非常小后端代码在Sails中创建功能齐全的聊天应用程序,这一点令人印象深刻。对于资源丰富的pubsub不合适的情况 - 或者如果你只是简单地想要使用它--Sails会在sails.sockets namespace上公开较低级别的方法。文档很清楚它们是如何工作的。

要将套接字连接到任意房间,请执行sails.sockets.join(<socket>, <roomName>),其中<socket>是原始套接字(可能来自req.socket或套接字ID)。

要向房间中的所有套接字广播消息,请执行sails.sockets.broadcast(<roomName>, <data>)

Sails JS documentation中详细介绍了这些和更多方法。

答案 1 :(得分:0)

我刚刚开始使用SailsJS,而且已经是一个忠实粉丝了。 我需要弄清楚这是否也可以通过例如Heroku或其他SAAS提供商,但似乎并不那么难。

所以只需跟进我对SailsJS 0.10做的事情:

服务器侧

制作一个具有以下功能的控制器:

join: function (req, res) {

  if (req.isSocket === true) {

    sails.sockets.join(req.socket, 'mysecretroom');
    return res.send(200, 'joined');

  }

  return res.send(200);

},
sendToRoom: function( req, res ) {
  if (req.isSocket === true ) {
     sails.sockets.broadcast('mysecretroom', 'messageevent', {message:'Listen very carefully, I'll shall say this only once..!'});
  }
  return res.send(200);
}

<强>客户端:

io.socket.on('messageevent', function (data) {
   console.log(data);
})

+1 kudos @ sgress454!

谢谢!