engine.io 和 socket.io 有啥区别?

Posted

技术标签:

【中文标题】engine.io 和 socket.io 有啥区别?【英文标题】:What's the difference between engine.io and socket.io?engine.io 和 socket.io 有什么区别? 【发布时间】:2012-01-22 11:19:28 【问题描述】:

如果此问题重复,请纠正我。 关于 node.js,我使用 socket.io 进行从客户端应用程序到服务器应用程序的实时套接字连接。 我刚听说engine.io,engine.io 是socket.io 的替代品吗? 我在engine.io 网站上找不到任何有用的信息

提前致谢

【问题讨论】:

【参考方案1】:

游戏有点晚了 :-),但我会在这里提及它以供后人参考。

除了“较低级别”之外,最重要的区别之一是 socket.io 将首先从 websockets 开始并降级,直到找到可以工作的传输。另一方面,engine.io 将从短轮询开始(并在侧面升级,直到撞墙)。

为什么?

从用户的角度来看,一个不成功的 WebSocket 连接可以转化为等待实时应用程序开始交换数据的至少 10 秒。这在感知上会损害用户体验。

目前(2013 年),websockets 还没有普及(例如旧版浏览器、蜂窝网络等),所以从 XHR 1st 开始是明智的。

有关详细信息,请参阅https://github.com/socketio/engine.io(Goals 部分)。

【讨论】:

【参考方案2】:

engine.io 是比 socket.io 低级的库。

Engine 之于 Socket.IO 就像 Connect 之于 Express。

如果您想要较低级别的抽象,请使用 engine.io。如果你想要一个 websocket 抽象,请继续使用 socket.io。

如果您在 socket.io 之上构建库/框架,您会更感兴趣 engine.io。

如果您在 socket.io 之上构建应用程序,您会更感兴趣 socket.io。

【讨论】:

感谢您的链接,正是我所需要的:D 明确答复,谢谢!所以如果我需要多路复用,我应该使用 Socket.IO【参考方案3】:

Socket.IO v0.9 已经过时并且有一点漏洞,Engine.IO 是临时的继任者。 Socket.IO v1.0(即将发布)将使用Engine.IO并且比v0.9好很多。

在我的测试中,Engine.IO 的性能似乎优于 Socket.IO v0.9,请参阅比较:https://medium.com/node-js-javascript/b63bfca0539

Socket.IO 会在连接丢失后尝试重新连接一段时间,而 Engine.IO 不会。

Socket.IO 支持房间,而 Engine.IO 不支持。如果您有连接侦听不同的数据/通道,您将需要房间(通过这些模块或您自己的实现)。

【讨论】:

您的意思是“Socket.IO 支持房间,而 Engine.IO 不支持”(我们可以在您的博客上看到)?【参考方案4】:

socket.io 建立在 engine.io 之上。

socket.io 是有花里胡哨的 engine.io。

如果您不需要 socket.io 的所有内容(redis 存储、组等),请使用引擎。

【讨论】:

我相信当 Socket.IO 1.0 出现时,它将基于 Engine.IO,但现在(0.9)不是:groups.google.com/d/msg/socket_io/BudZpQiyMbQ/tnm-I-WNJWkJ

以上是关于engine.io 和 socket.io 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

客户端正在使用不受支持的 Socket.IO 或 Engine.IO 协议版本错误

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

Ubuntu 12.04 中的 Socket.io 错误

需要Engine.IO教程[关闭]

engine.io 是不是支持安全的 WebSockets wss?

Android socket.io 编码