挑战:
我想使用 SailsJS ,并且能够通过socket.io加入一个房间,并从这个房间接收未经请求的消息,而不仅仅是当一个人进入或离开房间但是也收到物品。
因此有几个客户端连接到服务器。 然后广播(从服务器发起)消息/对象到每个房间,从而在这个房间里连接插座。
我可能只是给每个连接的套接字发送一条消息,但是非常想要一个关于如何使用SailsJS 0.10执行此操作的示例,以及使用SailsJS 0.10方式的优雅方法。
我在看https://github.com/balderdashy/sailsChat,但我认为这是接近模型本身,例如:autosubscribe:['destroy','update']
在我看来,这应该更松散地耦合,而不是与模型本身联系在一起。
提前致谢!
我
答案 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!
谢谢!