使用 AJAX 无法获得的 HTML5 Web 套接字有啥好处?

Posted

技术标签:

【中文标题】使用 AJAX 无法获得的 HTML5 Web 套接字有啥好处?【英文标题】:What do you get with HTML5 web sockets that you can't have with AJAX?使用 AJAX 无法获得的 HTML5 Web 套接字有什么好处? 【发布时间】:2011-03-15 20:47:32 【问题描述】:

伊恩·希克森says:

我期待 iframe 沙盒功能 如果它对开发者来说将是一个巨大的福音 起飞。我个人的最爱 功能可能是 Web Sockets API,允许双向 与服务器通信,以便 你可以实现游戏,聊天, 遥控器等等。

使用 Web 套接字可以获得哪些 AJAX 无法获得的东西?它只是方便,还是以某种方式更有效?是不是服务器可以向客户端发送数据,而不必等待消息才能响应?

【问题讨论】:

顺便说一下,WebSockets 不是 html5 标准的一部分。这是一项独立的技术。 没错,但是,@yojimbo87,它被认为是 HTML5 系列规范的一部分。它们被设计为一起使用。 【参考方案1】:

是的,这完全取决于服务器能够将数据推送到客户端。目前,在没有 Flash/Silverlight/Java/ActiveX 的情况下模拟双向通信采用以下两种解决方法之一:

传统轮询:客户端经常向服务器发出小请求,检查更新。即使没有发生更新,客户端也不知道这一点,并且必须不断地轮询更新。尽管每个请求可能是轻量级的,但许多客户端的持续轮询可以很快加起来。 长轮询:客户端定期请求更新,如定期轮询,但如果还没有可用的更新,则服务器不会立即响应并保持连接打开。当更新最终可用时,服务器将其推送到客户端,客户端对其进行操作,然后重复该过程。长轮询提供类似推送的更新解决方案,但基本上是一种自我造成的 DDoS 攻击,并且对于许多类型的 Web 服务器来说可能会占用大量资源。

使用 WebSockets,您可以获得长轮询的所有响应能力优势,同时显着减少服务器端开销。

【讨论】:

【参考方案2】:

WebSockets 比 AJAX 调用更高效(并且“更实时”),因为您保持连接打开并且不会在每次请求和响应之后发送额外的协议标头和其他内容。看this的文章:

在与 WebSocket,客户端和服务器交换 每帧数据,每帧 2 个字节, 与 8 KB 的 http 相比 进行连续轮询时的标题。

【讨论】:

以上是关于使用 AJAX 无法获得的 HTML5 Web 套接字有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 html5 地理位置无法获得结果?

在 Web 主机上使用 websocket 或 API(Ajax 推送引擎)技术

带有 RESTful JSON 服务、HTML5 和 jQuery ajax 的 Java Web 框架

无法使用PhoneGap在Windows Phone 7中调用Ajax方法

一起学WEB HTML5 第1讲

一起学WEB HTML5 第1讲