我目前正在使用 Node.js 构建一个实时应用程序。我使用 socket.io 来支持实时交互,但已加载 jQuery,因此我可以使用 AJAX。我最初使用 socket.io 进行服务器和客户端之间的所有通信。
我开始认为 AJAX 可能更适合某些情况,例如异步执行 RESTful 事务,因为我不必在套接字中编写单独的消息情况来处理每个新事务以及编写 RESTful 路由。
我想知道我是否正在做某件事,或者是否最好使用套接字来提高性能或其他我没有考虑到的事情。
谢谢!
马特·穆勒
是的,WebSockets(RFC 6455 https://www.rfc-editor.org/rfc/rfc6455) 和 Ajax 有很大不同并且服务于不同的目的。
正如您所说,使用 Ajax 您可以执行 RESTful 请求。这意味着您可以利用现有的 HTTP 基础设施,例如代理cache请求和使用有条件获取请求 http://ruturajv.wordpress.com/2005/12/27/conditional-get-request/。 Ajax 请求可能相当重量级,因为每个 Ajax 请求都包含 HTTP 标头并包含 cookie。
WebSockets 专为低延迟双向通信而设计。根据设计,WebSockets 在每条消息中的开销非常小。例如。 WebSockets 消息不必包含任何 HTTP 标头,并且将来可能用于 VoIP 和双向流传输。
另一个区别是 Ajax 可以与无国籍的服务器。例如。如果您的 Web 负载通过多个服务器进行平衡,则任何服务器都可以处理 Ajax 请求,即使在重新启动(或升级)后也是如此。 Websocket 已“连接”并使用stateful服务器,因此使用多个服务器可能会更困难。
还有服务器发送事件,与 WebSocket 类似,服务器可以将数据推送到客户端(如果没有 hack(例如 comet),Ajax 就无法完成此操作),并且它还可以处理自动重新连接。但它仅适用于单向(服务器到客户端)的消息。看HTML5 服务器端事件:EventSource 与包装的 WebSocket https://stackoverflow.com/a/8502556/213269.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)