使用sockjs的通道(node.js,socket.io)
它引起了我的注意, socket.io
有很多问题(内存泄漏,CPU使用率等),所以我正在转换我的应用程序sockjs
(或别的..如果这变成很难实现)。
在socket.io
我能够使用相同的连接轻松发送多个“cahnnels”上的消息
socket.emit('news', { hello: 'world' }); socket.emit('other', { hello: 'world' });
我怎样才能达到这个使用sockjs
? 我知道这个函数并没有在sockjs
实现,但是有没有一个可靠的框架呢? 我遇到了这个websocket多路复用,但不满意我在几个博客上阅读的评论。
谢谢
我真的很喜欢primus库上的团队的方向,因为现在socket的实现有太多的混乱。 它们允许您在几个最stream行的websocket库(包括sockJS)之间自由切换,而不需要额外的代码。
您可以使用社区插件室中的 primus来完成您正在尝试的操作。
该插件可以让你做这样的事情:
spark.room('news').write( { hello : 'world' } );
火花的工作原理与套接字几乎相同。 只要primus接收到连接,它就会给你一个spark对象来操作。 所以,这是一个完整的例子:
var Primus = require('primus') , http = require('http'); var server = http.createServer(/* request handler */) , primus = new Primus(server, { transformer: 'sockjs' }); primus.on('connection', function (spark) { spark.room('news').write( { hello : 'world' } ); });
请注意,与primus使用sockJS有几个警告 。 注意事项不会像你所描述的那样影响你的情况。
就我个人而言,我已经成功与旧的Ws库结合primus来获得这些不错的function。 它为您提供RFC 6455兼容套接字,这有助于在尝试连接多个平台上的客户端时使用。
更新0 是针对客户端过滤客房的评论中的问题做出的回应,如下所示:
首先 ,根据primus客户端使用的文档 ,您需要访问primus客户端API。 对于开发使用,路由会自动添加到您的http服务器,以便您可以在您的html中执行以下操作:
// use this to load the client-side framework in development only <script src="/primus/primus.js"></script>
然后 ,查看链接文档 ,了解您需要在生产中执行哪些操作,以支持需要访问客户端上的primus库的情况。
其次 ,在primus-room客户端/服务器示例中查看如何设置。 您可以使用此方法将消息广播到特定的房间。
我们的团队提出了非常类似的devise问题,而且前一天我们刚刚完成了一个图书馆的版本0,可以帮助你。 文档可以使用一些工作,但testing通过,所以它应该处于一个状态,如果你想要的话。 我们select实现发布 – 订阅function而不是事件,因为我们的东西通常在水平扩展环境中运行,事件必须在发布 – 订阅之上实现。 该库位于express,redis和sockjs之上,提供简单的令牌authentication逻辑,RPC api界面,以及通过redis进行发布 – 订阅。
随意提交任何问题的机票或function要求,我们非常乐意改变它。 这是一个耻辱的socket.io不支持,因为社区支持扩展,如多路复用,真的很方便。 希望这有助于消除一些阻碍快速启动和运行的障碍。