当前位置 : 主页 > 网页制作 > HTTP/TCP >

http – 什么特定用例通过WebSockets和长轮询调用BOSH?

来源:互联网 收集:自由互联 发布时间:2021-06-16
BOSH是…… a transport protocol that emulates the semantics of a long-lived, bidirectional TCP connection between two entities (such as a client and a server) by efficiently using multiple synchronous HTTP request/response pairs without
BOSH是……

a transport protocol that emulates the semantics of a long-lived, bidirectional TCP connection between two entities (such as a client and a server) by efficiently using multiple synchronous HTTP request/response pairs without requiring the use of frequent polling or chunked responses.

这听起来像WebSockets和HTTP长轮询,除了它使用两个开放的HTTP连接而不是一个,并且不扩展HTTP协议.

两个协议之间有什么区别,哪个用例更喜欢WebSockets而不是BOSH?

首先让我解决WebSockets准备情况:

默认情况下,Chrome,Safari和iOS(iPhone和iPad)会附带并启用Hixie-76协议的WebSockets实施. Hixie-76协议也出厂但默认情况下在Firefox 4和Opera 11中禁用.web-socket-js项目是Flash shim / polyfill,它为任何带Flash的浏览器添加了WebSocket(Hixie-76)支持.

换句话说,WebSockets几乎适用于所有浏览器.

Opera和Mozilla之所以默认选择禁用该协议,是因为理论上担心可能会有一些破坏的HTTP代理/中介使用协议的Hixie版本进行攻击/中毒.同样的问题也适用于Flash,但Mozilla和Opera对他们发布的代码负有更高的责任. HyBi版本的协议(该协议被移至IETF HyBi工作组)解决了安全问题.

Mozilla,Opera,谷歌和微软都致力于HyBi协议的实施(尽管微软现在将其作为separate download维护).有一个branch of web-socket-js支持HyBi-07.

更新:截至2013年2月,最新的HyBi/IETF RFC 6455 spec由Chrome 14,Firefox 7,IE10,Opera 12.1,Safari 6.0和web-socket-js Flash shim / polyfill支持.在移动设备上,iOS 6.0上的Safari,Opera Mobile 12.1,Android版Chrome 14,Android版Firefox 7和Blackberry 7支持IETF6455.原始默认Android浏览器没有任何WebSocket支持.

WebSocket服务器易于实现.有许多独立和插件实现,其中大多数支持Hixie-76和HyBi协议版本:

> libwebsockets
> Jetty
> pywebsockets
> websockify
> Socket.IO
> phpwebsocket
> Protocol::WebSocket (perl)
> em-websocket (ruby)
> node-websocket-server

BOSH与WebSockets:

>延迟:虽然BOSH草案文件声称延迟非常低,但BOSH很难与WebSockets竞争.除非你有理想的条件,所有中介和目标服务器都支持HTTP / 1.1,否则BOSH客户端和连接管理器将需要在每个数据包和每个请求超时后重新建立连接.这将显着增加延迟和延迟抖动.对于实时应用,低抖动通常比平均延迟更重要. WebSocket连接在延迟和抖动方面与原始TCP连接非常相似.即使在理想条件下,BOSH通信的客户端到服务器延迟(因此往返)也总是高于WebSockets:BOSH仍然必须遵守HTTP请求 – 响应语义. HTTP流传输允许每个请求多个响应(通过将“单个”响应分成多个部分)但反之亦然(每个客户端消息是新请求).
>小数据包开销:在WebSockets中,有两个字节的成帧开销很小
消息.在BOSH中,每条消息都有HTTP请求和响应头(每次往返很容易180字节).此外,每条消息都包含在XML中(假设是可选的,但规范没有定义如何)与多个会话相关的属性.
>复杂性:虽然BOSH在浏览器中使用现有机制,但它需要一个中等复杂的JavaScript库来实现BOSH语义.与本机/浏览器(甚至Flash)实现相比,在Javascript中管理此操作还会增加延迟和抖动.
>牵引力:BOSH开始生活,以提高XMPP的效率.它是从XMPP社区中长大的,而且从我所知道的那个社区之外的关注很少. BOSH和XMPP的文件草案分开,但没有XMPP,BOSH的实际使用似乎很少.

更新:

刚刚发现了Ian Fette讨论advantages of WebSockets over the Channel API which is similar to BOSH(44:00)的视频

网友评论