【发布时间】:2011-09-20 00:24:17
【问题描述】:
BOSH 是...
一种传输协议,它通过有效地使用多个同步 HTTP 请求/响应对来模拟两个实体(例如客户端和服务器)之间的长期双向 TCP 连接的语义,而无需使用频繁的轮询或分块回复。
这听起来像WebSockets 和 HTTP 长轮询,只是它使用两个打开的 HTTP 连接而不是一个,并且不扩展 HTTP 协议。
这两种协议有什么区别,哪些用例更喜欢 WebSockets 而不是 BOSH?
【问题讨论】:
BOSH 是...
一种传输协议,它通过有效地使用多个同步 HTTP 请求/响应对来模拟两个实体(例如客户端和服务器)之间的长期双向 TCP 连接的语义,而无需使用频繁的轮询或分块回复。
这听起来像WebSockets 和 HTTP 长轮询,只是它使用两个打开的 HTTP 连接而不是一个,并且不扩展 HTTP 协议。
这两种协议有什么区别,哪些用例更喜欢 WebSockets 而不是 BOSH?
【问题讨论】:
首先让我谈谈 WebSockets 的准备情况:
Hixie-76 协议的 WebSockets 实现默认在 Chrome、Safari 和 iOS(iPhone 和 iPad)中提供和启用。 Hixie-76 协议也已发布,但在 Firefox 4 和 Opera 11 中默认禁用。web-socket-js 项目是一个 Flash shim/polyfill,可为任何带有 Flash 的浏览器添加 WebSocket (Hixie-76) 支持。
换句话说,WebSockets 几乎适用于所有的浏览器。
Opera 和 Mozilla 选择默认禁用该协议的原因是出于理论上的担忧,即使用 Hixie 版本的协议可能会攻击/中毒的一些损坏的 HTTP 代理/中介。同样的担忧也适用于 Flash,但 Mozilla 和 Opera 对他们发布的代码负有更高的责任。协议的 HyBi 版本(该协议已移至 IETF HyBi 工作组)解决了安全问题。
Mozilla、Opera、Google 和 Microsoft 都在致力于 HyBi 协议的实现(尽管 Microsoft 目前将其维护为 separate download)。有一个 branch of web-socket-js 支持 HyBi-07。
更新:截至 2013 年 2 月,Chrome 14、Firefox 7、IE10、Opera 12.1、Safari 6.0 和 web-socket-js Flash shim/polyfill 支持最新的 HyBi/IETF RFC 6455 spec。在移动设备上,iOS 6.0、Opera Mobile 12.1、Chrome 14 for Android、Firefox 7 for Android 和 Blackberry 7 上的 Safari 支持 IETF6455。最初的默认 Android 浏览器不支持任何 WebSocket。
WebSocket 服务器很容易实现。有许多独立和插件实现,其中大多数同时支持 Hixie-76 和 HyBi 协议版本:
BOSH 与 WebSockets:
更新:
刚刚找到一个视频,其中 Ian Fette 讨论了 advantages of WebSockets over the Channel API which is similar to BOSH(在 44:00)
【讨论】: