何时使用socket.io,何时使用ajax?

12

我一直在使用Node.js编程,并研究如何使用socket.io和Ajax调用Node服务器。socket.io是否设计用来取代Ajax? 我想知道在什么情况下使用socket.io更好,而Ajax则更适合。感谢您的回答。

1个回答

25

Web sockets (通过socket.io) 能提供而ajax缺少的主要功能之一是服务器推送。因此,如果您使用ajax想了解服务器上的新事件(例如,不同的用户向您发送了消息),则需要进行服务器轮询,也就是在相对频繁的周期循环中发送ajax请求。大多数时候,服务器会响应说没有新内容,但偶尔有新的内容时,客户端可以得知。

Web sockets允许服务器主动向客户端推送通知,而无需轮询。因此,如果您的应用程序有任何需要在服务器上启动并在浏览器中显示的信息,则web sockets是更好的解决方案。

  • 在请求/响应模型中向服务器提交数据
    • ajax或web sockets本质上是等效的,传统的表单提交(POSTS)也可行
  • 以事件流模型向服务器提交事件
    • web sockets最好,可以通过ajax实现某种程度的仿真
  • 从服务器向浏览器推送事件
    • web sockets最好,可以通过ajax长轮询、flash等方式进行仿真(socket.io如果无法使用真正的web sockets,则有几个回退选项可供尝试)。
  • 旧版本浏览器和一些移动平台
    • 不支持web socket,因此ajax是您的备选方案

谢谢您的快速回复。所以,除非您有充分的理由使用其他方式进行活动通信,请使用Web套接字。Web套接字有什么缺点吗? - joshua-anderson
浏览器对于Web套接字的支持还不如对于Ajax的支持完整,特别是在移动设备上。像所有新技术一样,围绕它们的工具和社区知识还不如对于Ajax成熟。此外,在代理和Web服务器上部署时可能会遇到挑战,需要特定配置才能使Web套接字正常工作。 - Peter Lyons
@PeterLyons,如果我正在制作一个通知系统,那么使用Web套接字是最好的选择,对吗? - Utkarsh Dixit
2
但是为什么要使用socket.io而不是简单的node.js webSockets呢?有什么用例/优势? - Agent Zebra
1
@AgentZebra 我的猜测是,当你只控制对话中的一方时,应该选择使用socket.io,因为当另一方不支持Websockets时,socket.io会自动降级。如果你控制双方,使用node.js Websockets似乎没有任何缺点。但我很愿意接受更正和教育。 - Ric

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