5

我有一个网站,它完全用 php 和基本的 jquery ajax 编码。然而,在我了解了 node.js/socket.io 之后,我使用 nodejs 和 socket.io 重新编写了几乎所有涉及 ajax 的实时内容。我有点困惑我是否做对了。所以我的问题是 ajax 何时是比使用 node/socket 更优化的解决方案?

4

2 回答 2

10

首先,您应该了解两者之间的区别,答案将变得清晰。

AJAX 用于简单的异步请求。它们不需要设置 Node 服务器,几乎所有浏览器都支持它们。当您需要从服务器检索一条信息时使用它们。然而,它们确实有通过 HTTP 发送的开销,因此它们需要是正确的 HTTP 请求/响应(增加权重)。

WebSockets(在 Node.js/socket.io 设置中可用)在您频繁访问某些数据或需要与服务器建立实时、持久的连接时使用。您可以建立套接字连接并将数据包从服务器发送到客户端。与 AJAX 解决方案相比,这是轻量级的,但是旧浏览器不支持 Websocket,您需要设置一个服务器来处理此类请求。

特别是 Socket.IO 使用了一系列不同的技术,以便您可以获得更好的浏览器支持:长轮询、多部分流等。这允许您从服务器获得“即时”反馈,但在大多数情况下它仍然使用 HTTP作为协议。但是,如果 WebSocket 可用(即浏览器支持),它将使用它们。

实际上在某些情况下 Node.js/Socket.io会使用 AJAX

如果您不是在玩在线游戏,或者您不需要经常更新应用程序的状态,我建议您使用 AJAX 而不是 Node.js/socket.io 设置。

于 2013-05-28T15:45:43.817 回答
4

Nodejs 非常适合需要在客户端和服务器之间保持持久连接打开的应用程序。基本上,如果您想在客户端和服务器之间发送实时数据(聊天客户端、游戏等),nodejs 是一个不错的选择。

使用 nodejs 这种持久连接不会阻塞其他请求。许多其他语言,如 php(每个连接启动一个新的服务器进程)在这种情况下都会遇到困难,您最终可能会承受巨大的 CPU 负载。

如果目标是具有尽可能低的延迟的实时数据,那么 Socket.io 和 node.js 一起是一个更好的选择。只有在不支持其他技术时,它才会退回到长轮询,它的首选是使用 Web 套接字。

当然 apache(使用 php)和 nodejs 都可以做 AJAX,问题应该是这是否是您传输数据的正确方式,我们需要更多地了解您想要实现的目标!

于 2013-05-28T15:53:21.483 回答