小编1ns*_*ane的帖子

Engine.io或SockJS,哪一个可供选择?

我最近遇到了关于内存泄漏和扩展问题的Socket.io问题.我决定使用Socket.io是在一年前做出来的,当时它无疑是最好的库.

既然Socket.io造成了很多麻烦,我花时间寻找在此期间可用的替代品,并认为Engine.io和SockJS通常都适合我.但是,在我看来,两者都有一些缺点,我不确定选择哪一个.

Engine.io基本上是Socket.io的完美轻量级版本,它不包含我不需要的所有功能.我已经为Socket.io编写了自己的重新连接和心跳逻辑,因为我对默认逻辑不满意,我从不打算使用Socket.io提供的房间或其他功能.

但是 - 在我看来 - Engine.io的主要缺点是建立连接的方式.客户端以较慢的jsonp-polling开始,如果它们支持更好的传输,则会升级.该支持WebSockets的原生(数量不断增加)的客户有超过那些使用过时的浏览器客户更长的和不稳定的连接过程的形式不利的事实,违背我的,应该如何处理的感觉.

另一方面,SockJS完全按照我的意愿处理连接.根据我的阅读,它似乎相当稳定,而Engine.io目前有一些问题.

我的应用程序在单个域上的Nginx路由器后面运行,因此我不需要SockJS提供的跨域功能.但是,由于提供此功能,SockJS根本不公开客户端的cookie数据.到目前为止,我通过cookie和查询字符串令牌对Socket.io进行了2因素授权,而这对SockJS来说是不可能的(使用Engine.io).

我已经阅读了几乎所有可用的内容和两者的优点和缺点,但似乎到目前为止没有太多讨论或发布,特别是关于Engine.io(这里只有8个问题用engine.io标记).

  • 你喜欢哪2个图书馆中的哪一个?你在生产中使用它们吗?

  • 哪一个可能会更积极地维持,并且在未来可能比另一个更具优势?

comparison websocket socket.io sockjs engine.io

35
推荐指数
1
解决办法
2万
查看次数

在socket.io重新连接时更新查询字符串参数

我传递一个包含ID的自定义查询字符串,以便在通过socket.io连接时在服务器上授权客户端.

var env = {id:12345};
var socket = io.connect('https://example.com', {query:'i='+env.id, port:443, reconnect:false, secure:true});  
Run Code Online (Sandbox Code Playgroud)

当客户端因任何原因断开连接时,只需调用以下函数即可重新连接.

socket.socket.connect();
Run Code Online (Sandbox Code Playgroud)

但是,在重新连接时env.id通常包含与初始连接期间不同的值,并且我希望在每次重新连接时在查询字符串中具有当前值.

上面的重新连接方法再次发送初始值,即使env.id同时更改为其他值.

我在调用重新连接函数时尝试设置当前参数,但这似乎不起作用.

socket.socket.connect('https://example.com', {query:'i='+env.id, port:443, reconnect:false, secure:true})  
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法只使用当前env.id值更新查询字符串然后重新连接?

或者,我是否需要在断开连接时销毁整个套接字对象,然后使用var socket = io.connect()当前ID 建立新连接?

parameters reconnect node.js socket.io

11
推荐指数
2
解决办法
5399
查看次数