使用Websockets,是否还需要AJAX?

8

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

我开始思考,在某些情况下像异步执行RESTful事务这样的操作,AJAX可能更加适合,因为我不必编写一个单独的消息case来处理每个新的事务,同时编写RESTful路由。

我想知道自己的想法是否正确,或者最好仍然使用sockets来提高性能或者考虑其他因素。

谢谢! Matt Mueller

2个回答

11

是的,WebSockets(RFC 6455)和Ajax非常不同,用途也不同。

正如您所说,使用Ajax可以进行RESTful请求。这意味着您可以利用现有的HTTP基础设施,例如代理来缓存请求并使用条件获取请求。Ajax请求可能相当重量级,因为每个Ajax请求都包含HTTP标头并包括Cookie。

WebSockets旨在实现低延迟的双向通信。按设计,WebSockets每个消息中的开销非常小。例如,WebSockets消息不必包含任何HTTP标头,并且将来可用于双向VoIP和流媒体。

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

还有Server Sent Events,类似于WebSockets,因为服务器可以向客户端推送数据(Ajax不能在没有技巧的情况下完成(例如comet)),并且还可以处理自动重新连接。但它仅适用于单向消息(服务器到客户端)。请参见HTML5 Server-Side Event: EventSource vs. wrapped WebSocket


1
非常棒的答案。非常感谢! - Matt
点赞了,这里有一个简单的问题,我有一个使用WebSockets的实时新闻源,当用户加载主页时,我有两个选项,我可以通过WebSockets推送数据,或者我可以进行Ajax请求,尽管我有WebSockets,你是说我应该在这里和“加载更多”按钮中使用Ajax请求,但在推送实时新闻时使用WebSockets? - PirateApp

-1

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


是的,但您仍然可以使用WebSockets让客户端请求数据。 您只需要设计自己的请求/响应协议即可。 - Matthew Flaschen
正如Matthew所提到的,Websockets是双向通信,每一方都可以发起请求。而AJAX必须由客户端发起。 - Matt

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