使用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多路复用,但不满意我在几个博客上阅读的评论。

谢谢

       

网上收集的解决方案 "使用sockjs的通道(node.js,socket.io)"

我真的很喜欢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不支持,因为社区支持扩展,如多路复用,真的很方便。 希望这有助于消除一些阻碍快速启动和运行的障碍。

https://github.com/azuqua/node-token-sockjs

https://github.com/azuqua/jquery-token-sockjs