【发布时间】:2014-04-03 18:01:59
【问题描述】:
我最近在 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在这里)。
您更喜欢这两个库中的哪一个?出于什么原因?你在生产中使用它们吗?
未来哪一个可能会得到更积极的维护,并且可能比另一个更有优势?
【问题讨论】:
-
engine.io是对socket.io(均由LearnBoost 开发)和socket.io1.0 的较低级别的“改造”,应该提供构建在顶部的更高级别的接口engine.io. -
另见author's thoughts,了解他们的关系性质。
-
嗨 1nsane,只是想知道在 Socket.io 新版本发布后您的应用发生了什么以及您最后选择了什么。谢谢
-
顺便说一句,SockJS 有双重 JSON.stringify() 限制。我想知道它怎么能与 Engine.IO 相提并论。
-
这篇文章在将近 2 年后还有意义吗?
标签: websocket socket.io comparison sockjs engine.io