我最近在 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 标记的问题)。
您更喜欢这两个库中的哪一个,出于什么原因?你在生产中使用它们吗?
哪一个可能会得到更积极的维护,并且将来可能比另一个更有优势?