使用sockjs的频道(node.js,socket.io)

gum*_*eda 4 websocket node.js socket.io sockjs

我注意到它socket.io有很多问题(内存泄漏,CPU使用等),因此我将我的应用程序转换为sockjs(或其他东西......如果这变得很难实现).

socket.io我能够轻松地emmit几个"cahnnels"的消息使用相同的连接

socket.emit('news', { hello: 'world' });
socket.emit('other', { hello: 'world' });
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这个目的sockjs?我知道这个功能尚未实现sockjs,但是有一个可靠的框架可以做到这一点吗?我遇到了这个websocket-multiplex,但对我在几个博客上阅读的评论不满意.

谢谢

ctl*_*cko 6

我真的很喜欢团队在primus库上的方向,因为现在套接字实现有很多流失.它们允许您在几个最流行的websocket库(包括sockJS)之间自由切换而无需额外的代码.

你可以使用primus与社区插件来完成你想要做的事情.

该插件可以让你做这样的事情:

spark.room('news').write( { hello : 'world' } );
Run Code Online (Sandbox Code Playgroud)

火花的工作方式与插座几乎相同.只要primus接收到连接,它就会给你一个火花对象进行操作.所以,这是一个完整的例子:

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' } );
});
Run Code Online (Sandbox Code Playgroud)

请注意,使用带有primus的sockJS有一些注意事项.警告不会像您所描述的那样影响您的情况.

就个人而言,我已经成功地将好的旧ws库与primus相结合,以获得这些不错的功能.它为您提供符合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>
Run Code Online (Sandbox Code Playgroud)

然后,查看链接文档,了解生产中需要执行的操作,以支持您需要访问客户端上的primus库的情况.

其次,在primus-rooms客户端/服务器示例中查看如何进行设置.您可以使用方法将消息广播到特定房间.