简答
保持一个积极的WebSocket拥有成本,为客户端和服务器,阿贾克斯是否有一个成本只有一次,这取决于你用它做什么。
长的答案
的WebSockets经常被误解,因为这个整体的“嘿,使用Ajax,会做!”。不,Websockets不能替代Ajax。他们可能会应用于相同的领域,但有些情况下使用Websocket是荒谬的。
我们来举一个简单的例子:在客户端加载页面后加载数据的动态页面。很简单,打一个Ajax电话。我们只需要一个方向,从服务器到客户端。客户端会询问这些数据,服务器将把它们发送给客户端,完成。你为什么要为这样的任务实现websockets?您不需要始终打开您的连接,您不需要客户端不断询问服务器,也不需要服务器通知客户端。连接将保持打开状态,这会浪费资源,因为要保持连接打开,您需要不断检查连接。
现在聊天应用程序的事情是完全不同的。您需要通过服务器通知您的客户端,而不是强制客户端每隔几秒或几毫秒询问一次服务器是否有新问题。这是没有意义的。
为了更好地理解,请参阅两个人。一个是服务器,一个是客户端。 Ajax就像发送一封信一样。客户端发送一封信,服务器回复另一封信。事实是,对于一个聊天应用程序,对话会是这样的:
“嘿服务器,得到的东西对我来说
- 第
- 嘿服务器,得到的东西对我来说
-
号? - 嘿服务器,给我找点东西吗?
- 是的,就在这里。“
如果客户端从未要求答案,服务器实际上不能发送一封信给客户端。这是一个巨大的资源浪费。因为对于每个Ajax请求,即使它被缓存,您也需要在服务器端进行操作。
现在我前面讨论过使用Ajax加载数据的情况。想象一下,客户端正在与服务器通话。保持连接活动有成本。它耗费电力,你必须付钱给你的运营商。现在,如果你只是想让这个人告诉你三个字,你为什么还需要给某人打电话并让他打电话一个小时?发送一封该死的信。
总而言之,Websockets并非完全取代Ajax!
有时你会需要 Ajax其中Websocket的使用是荒谬的。
编辑:上证所情况下
技术是不使用很广泛,但它可能是有用的。正如其名称所述,Server-Sent Events是从服务器到客户端的单向推送。客户端不需要任何请求,服务器只是发送数据。
简而言之:
- 从客户端单向:阿贾克斯
- 单向从服务器:SSE
- 双向:WebSockets的
我相信这是正确的。在不需要双向通信的应用程序中,服务器上的ajax请求会更容易。另外,请考虑当HTML5脱机持久性变为可用时(与Websockets变得更加可用的时间基本相同),Web应用程序只会根据需要与服务器同步。 – badunk 2012-03-17 09:06:24