有了websockets,有一个AJAX的地方吗?

时间:2011-01-12 08:17:17

标签: ajax rest real-time websocket

我目前正在使用Node构建实时应用程序。我正在使用socket.io来支持我的实时交互,但是加载了jQuery,所以我可以使用AJAX。我最初使用socket.io来完成服务器和客户端之间的所有通信。

我开始认为AJAX可能更适合某些情况,例如异步执行RESTful事务,因为我不必在套接字中编写单独的消息案例来处理每个新事务以及编写RESTful路由。

我想知道我是否正在使用某种东西,或者是否最好使用套接字来提高性能或其他我没想过的东西。

谢谢! 马特穆勒

2 个答案:

答案 0 :(得分:10)

是的,WebSockets(RFC 6455)和Ajax完全不同,用途不同。

正如您所说,使用Ajax,您可以执行RESTful请求。这意味着您可以利用现有的HTTP基础设施,例如代理缓存请求并使用conditional get requests。 Ajax请求可能非常重,因为每个Ajax请求都包含HTTP头并包含cookie。

WebSockets专为低延迟双向通信而设计。按照设计,WebSockets在每条消息中的开销很小。例如。 WebSockets消息不必包含任何HTTP标头,并且将来可能用于双向VoIP和流式传输。

另一个区别是Ajax可以与无状态服务器一起使用。例如。如果您的Web负载与多个服务器平衡,则任何服务器都可以处理Ajax请求,即使在重新启动(或升级)之后也是如此。 Websocket是“连接”并使用有状态服务器,因此使用多个服务器可能更难。

还有与WebSockets类似的服务器发送事件,因为服务器可以将数据推送到客户端(无法通过Ajax完成而无需黑客攻击(例如彗星)),并且它还可以处理自动重新连接。但它只适用于一个方向的消息(服务器到客户端)。请参阅HTML5 Server-Side Event: EventSource vs. wrapped WebSocket

答案 1 :(得分:-1)

这是两种完全不同的技术,可以一起使用:使用AJAX,请求由客户端启动,而使用WebSockets,请求由服务器启动,以便将一些数据推送到客户端。