何时使用node.js,何时使用ajax?

5

我曾经有一个网站,完全是用php和基础的jquery ajax编码开发的。但是在接触了node.js/socket.io后,我几乎重新编写了所有涉及ajax的实时内容,使用了nodejs和socket.io。现在我有点困惑,不知道这样做是否正确。所以我的问题是,什么情况下使用ajax比使用node/socket更优?


6
这就像问在手术中使用地毯还是在排球比赛中使用牙刷更加优化一样荒谬。你需要使用正确的术语。 - N.B.
2个回答

10
首先,你需要了解两者之间的差异,答案就会变得清晰明了。
AJAX用于简单的异步请求。它们不需要设置Node服务器,并且几乎在所有浏览器上都受支持。当您需要从服务器检索某些信息时使用它们。但是它们会增加HTTP负载,因此需要适当的HTTP请求/响应(增加了负担)。
WebSockets(在Node.js/socket.io设置中可用)用于频繁访问某些数据或需要与服务器保持实时、持久连接的情况。您可以建立一个套接字连接,并从服务器向客户端发送数据包。与AJAX方案相比,这更加轻量级。但是WebSockets不受旧版浏览器支持,您需要设置一个服务器来处理此类请求。
特别地,Socket.IO使用多种技术的组合,以便您可以获得更好的浏览器支持:长轮询、分段流等。这使您可以从服务器获得“即时”反馈,但在大多数情况下仍然使用HTTP作为协议。但是如果WebSockets可用(即浏览器支持),它将使用WebSockets。
实际上,在某些情况下,Node.js/Socket.io也会使用AJAX。
如果您不是在制作在线游戏或者不需要频繁更新应用程序的状态,建议使用AJAX而不是Node.js/socket.io设置。

1
+1 很好的解释。希望您能再详细地扩展一下。 - samayo
1
但是每次我的应用程序与服务器Apache建立连接时,它都会为它们分配单独的线程,从而消耗大量资源,目前我已经设置了Apache/Node.js。我的意思是,如果我使用Ajax每20秒更新我的新闻提要或填充弹出窗口,那么它不会占用大量资源吗? - AnuragD
1
你在第二段描述的是WebSockets而不是SocketIO。SocketIO提供了类似web socket的支持,使用当前浏览器支持的任何传输方式;包括websocket、iframe、长轮询甚至是Flash等。 - Matt
1
是的,我用了 PHP,我不想用 Node.js 把整个东西都重新编写一遍。 - AnuragD
1
@AnuragD:你不必用Node.js编写整个网站,你可以使用PHP作为“内容/布局生成器”,并使用Node.js作为“服务提供者”,为网站提供所需的数据。当然,这需要两个服务器。 - MMM
显示剩余7条评论

4
Nodejs在需要客户端和服务器之间保持持久连接的应用程序中非常适用,如果您想在客户端和服务器之间发送实时数据(聊天客户端、游戏等),那么Nodejs是一个很好的选择。使用Nodejs,这种持久连接不会阻塞其他请求。而许多其他语言如php(其中每个连接都会启动一个新的服务器进程)在这种情况下会遇到困难,你很可能会遇到巨大的CPU负载。
当目标是实时数据且延迟尽可能低时,Socket.io和Node.js结合起来是更好的选择。它只有在其他技术不支持的情况下才会退回到长轮询,其首选是使用WebSockets。
当然,Apache(带有PHP)和Nodejs都可以执行AJAX,但问题应该是这是否是您传输数据的正确方式,我们需要更多了解您的实际需求!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接