【问题标题】:When to use node.js and when to use ajax? [closed]何时使用 node.js 何时使用 ajax? [关闭]
【发布时间】:2013-05-23 15:54:06
【问题描述】:

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

【问题讨论】:

  • 这就像在询问使用地毯进行手术或使用牙刷进行排球是否更理想。您需要正确使用术语。

标签: php javascript ajax node.js


【解决方案1】:

首先,你应该了解两者的区别,答案就会明朗。

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

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

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

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

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

【讨论】:

  • +1 很好的解释。希望你能把它扩大一点
  • 但是我的应用程序与服务器建立的每个连接 apache 都会为每个线程分配单独的线程,从而消耗大量资源,目前我已经设置了 apache/nodejs 。我的意思是,如果我使用 ajax 每 20 秒更新一次新闻源或填充弹出窗口,它不会占用大量资源吗??
  • 您在第 2 段中描述的是 WebSockets,而不是 SocketIO。 SocketIO 提供类似 web socket 的支持,使用当前浏览器支持的任何传输方式;无论是 websockets、iframe、长轮询甚至是 flash。
  • 是的,我用过 php,我不想在 node.js 中编写整个代码。
  • @AnuragD:您不必在 Node.js 中编写整个网站,您可以使用 PHP 作为“内容/布局生成器”,并将 Node.js 作为“服务提供者”这将提供网站所需的数据。这当然需要两台服务器。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 2012-03-26
    • 2011-07-20
    • 2018-10-15
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    相关资源
    最近更新 更多