NodeJS 如何在没有 WebSockets 的情况下处理持久连接?

Posted

技术标签:

【中文标题】NodeJS 如何在没有 WebSockets 的情况下处理持久连接?【英文标题】:How does NodeJS handle persistent connections without WebSockets? 【发布时间】:2011-03-25 04:09:20 【问题描述】:

我对 NodeJS 真的很陌生(如果我对某些东西听起来很天真,我很抱歉),我一直在研究示例 Chat Application 的源代码。

但是,我无法理解一件事。我知道 WebSockets 有助于处理持久的全双工双向连接。但是 NodeJS 如何在不使用 WebSockets 的情况下管理上述聊天应用程序中的持久连接呢?如果 NodeJS可以处理持久的双向连接,那么在 Node 中集成 Socket.IO 之类的功能究竟是什么?

【问题讨论】:

【参考方案1】:

除了 WebSockets,您还可以使用long polling 技术在服务器和客户端之间创建持久连接。

长轮询是 传统的投票技术和 允许模拟信息 从服务器推送到客户端。和 长轮询,客户端请求 来自服务器的信息 类似于普通民意调查的方式。然而, 如果服务器没有任何 可供客户使用的信息, 而不是发送空响应, 服务器持有请求并等待 以获得一些信息。 一旦信息可用 (或在适当的超时后),一个 完整的响应被发送到 客户。

但是它不如 WebSockets 高效,但它被使用是因为它可以在每个浏览器中工作,这与 WebSockets 不同。试试看这个article:

将千字节数据减少到 2 字节......并将延迟从 150 毫秒减少 到 50ms 远远超过边际。在 事实上,仅这两个因素 足以让 WebSocket 认真起来 对 Google 很感兴趣。

【讨论】:

【参考方案2】:

我不熟悉聊天应用程序。而且我没有看到托管演示的链接。

NodeJS 是一种服务器端技术。本机套接字没有问题。 Socket.IO 是一种结合了客户端和服务器端的技术。它只是碰巧将 NodeJS 用于服务器端。它的美妙之处在于它在客户端提供了一个通用的通信 API,而不管浏览器实际具有什么功能。

【讨论】:

聊天应用程序托管在chat.nodejs.org 所以你的意思是可以通过仅使用 NodeJS 来模拟 Socket.Io 提供的所有功能? 不,这不是我想说的。我的意思是,你可以通过重写 socket.io。 该聊天应用程序使用长轮询。您可以使用许多服务器端技术进行长轮询;不仅仅是 NodeJS。 哦,我不知道它使用了长轮询!谢谢指点! 它使用长轮询作为其后备技术之一。它尝试 WebSockets,如果不支持则尝试 FlashSockets,如果不支持,则回退到各种老式 Comet 方法。

以上是关于NodeJS 如何在没有 WebSockets 的情况下处理持久连接?的主要内容,如果未能解决你的问题,请参考以下文章

Websockets(ws) , NodeJs 集群,

Websockets:从NodeJS websocket服务器到带有WebSocketSharp的C#客户端的多个响应

通过 Websockets 在 Nodejs 和 Python 之间进行通信

端口 34037 已在使用 Heroku + Nodejs + Express + WebSockets

使用 Websockets 和 Nodejs 上传文件

Windows 上的 nodejs 和 websockets