`
Utone
  • 浏览: 20497 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

初探BOSH (Bidirectional-streams Over Synchronous HTTP)

阅读更多

    BOSH (Bidirectional-streams Over Synchronous HTTP)是一种在客户端和服务器端之间通过HTTP的请求/响应进行客户端和服务器双向通信的技术,BOSH在XMPP系列规范中的XEP-0124中 定义,应用场合为基于浏览器的客户端访问XMPP服务器。 下面的内容来自XEP-0124规范。http://www.xmpp.org/extensions/xep-0124.html
其具体应用需求:
1、  能够在手机或者浏览器的运行环境中使用**
2、  浏览器中的客户端能够建立双向的跨域的连接*
3、  兼容缓存部分HTTP Response的HTTP 代理 *
4、  快速通过有HTTP Response生存时间限制的代理 *
5、  兼容HTTP1.0 *
6、  兼容受限的网络连接环境(防火墙、代理、网关)
7、  容错性
8、  扩展性
9、  更小的带宽消耗
10、更快的实时响应时间
11、 支持轮询
12、 按顺序提交数据
13、防止Session中有非法插入的请求(interjecting HTTP requests into a session)
14、防止拒绝服务攻击
15、多路复用的数据流

    在规范中声称:打了*号的几项是无法用COMET技术实现(就是2、3、4、5),经过考察,作者是将COMET定义为流的方式推送数据的HTTP长连接 技术。因此,无法通过缓存HTTP响应、及有生存时间限制的HTTP代理。另外由于HTTP1.0无法支持块数据的编码(chunked transfer encoding)流的方式推送数据无法在HTTP1.0的环境下使用。(至于第2条,规范作者用了非常奇怪的方式去企图建立跨域的连接,俺决定放弃不追 究作者在说啥)要了解HTTP长连接技术,建议看:http://www.ibm.com/developerworks/cn/web/wa-lo- comet/index.html

系统架构:

在架构中,连接管理器( Connection Manager )与 Server 之间是原始的数据流(在 XMPP 的协议中就是 XMPP 的数据流), HTTP 客户端与连接管理器之间是 HTTP 协议以及 Body TAG 封装的数据流。

<o:p> </o:p>

流程描述:

BOSH 技术能够同时减小网络带宽和减小客户端响 应的时间。其方案是对客户端的请求连接管理器不给于返回直到数据已经就绪,当客户端收取连接管理器返回的数据会向连接管理器发送下一个请求,于是连接管理 器总是保持着一个客户端的请求,当服务器端数据就绪的时候,可以将数据封装在请求的响应包中,“推送”给客户端。

<o:p> </o:p>

如果双向连接长时间没有数据,连接管理器负责给客户端发送一个空包,空包触发客户端发送新的请求,连接管理器通过这种机制判断连接是否已经中断,由于 BOSH 不是轮询的机制,带宽消耗比标准的 TCP 连接大不了多少。


由于大多数的客户端不支持 HTTP Pipeling (单一的连接上承载并发的请求),于是,客户端必须从第二条 HTTP 连接发送消息。当第二条 HTTP 连接有新的请求发送的时候,连接管理器将第一条连接中的请求返回,即便此时第一条连接中的返回的是空数据包。这样做的原因是让客户端有需要的话可以发送新的请求过来。客户段同一时间最多只能保持两条 HTTP 连接,否则的话,客户端必须等待旧的请求处理完之后才能发送新的请求

在网络经常中断的环境下, BOSH 退化成每个数据请求一个新 HTTP 连接。然而,在通常情况下,网络环境良好,客户端可以使用 http/1.1, 这个时候,一个 Session 包含两个 TCP 长连接,所有的请求都在这两个长连接上传输。基本上任何时候,客户端通过一条连接能够推送数据到服务器,与此同时,服务器端可以“推送”数据到客户端。值得注意的是,这两条长连接的角色在客户端每发送一次请求则角色转换一次。

 

<o:p> </o:p> 尽管大多数时间可以随时推送数据到对端,但是,如果一方刚刚推送完数据,则需要等一个网络来回的时间才能推送下一个数据

分享到:
评论

相关推荐

    XMPPHP.rar_PHP XMPP_XMPPHP_BOSH_php xmpp_php xmpphp_xmpp s

    标签中的“xmpphp\_bosh”表示XMPPHP库还支持BOSH(Bidirectional-streams Over Synchronous HTTP)协议,这是一种让XMPP通过HTTP长连接的方式工作的方法,适用于那些不能直接使用TCP连接的环境,如防火墙或代理...

    strophejs-1.2.0.zip

    - **连接管理**:使用BOSH(Bidirectional-streams Over Synchronous HTTP)或WebSocket协议与XMPP服务器建立持久连接,实现低延迟的双向通信。 - **XML处理**:由于XMPP基于XML,Strophe.js内置了XML解析和生成...

    基于strophe.js的web聊天

    strophe.js通过BOSH(Bidirectional-streams Over Synchronous HTTP)技术解决了JavaScript在浏览器端无法持久连接的问题,使得Web应用可以实现类似原生应用的实时通信。 **2. BOSH服务与跨域问题** BOSH服务是...

    openfire3.10.0

    Openfire支持跨域通信(Xmpp-over-HTTP/TLS),通过BOSH(Bidirectional-streams Over Synchronous HTTP)实现,确保用户在防火墙或代理环境下也能正常通信。同时,Openfire提供SSL/TLS加密,保证通信数据的安全性。...

    openfire_src3.5.1源码

    这使得Openfire能支持多种客户端连接方式,包括传统的BOSH(Bidirectional-streams Over Synchronous HTTP)以及现代的WebSocket。 2. **认证与授权**:Openfire使用Jaas(Java Authentication and Authorization ...

    jwchat资料

    JabberHTTPBind是XMPP协议的一个实现,它允许XMPP服务器通过HTTP协议与客户端进行交互,从而实现BOSH(Bidirectional-streams Over Synchronous HTTP)连接管理。BOSH是一种在HTTP长连接基础上实现即时通讯的技术,...

    strophe.js

    Strophe.js通过与BOSH(Bidirectional-streams Over Synchronous HTTP)服务器配合,解决了JavaScript在浏览器环境中不能持久TCP连接的问题,从而实现类似WebSocket的实时通信效果。 **Strophe.js的工作原理**: 1....

    openfire中间件

    5. **加密通信**:支持通过BOSH(Bidirectional-streams Over Synchronous HTTP)或WebSockets进行安全的HTTP代理通信。 在JSJaC-master这个压缩包中,可能包含的是JSJaC库的源代码,开发者可以通过查看源码来理解...

    flXHR.js,xmpp web开发所需要的必要js文件。

    对于Openfire这样的XMPP服务器,它们通常提供RESTful API和BOSH(Bidirectional-streams Over Synchronous HTTP)服务,`strophe.flxhr.js`可以很好地与这些服务配合,确保Web应用能稳定地与服务器进行通信。...

    使用Strophe连接xmpp,轻松构建web即时聊天工具

    它支持WebSocket、BOSH(Bidirectional-streams Over Synchronous HTTP)和Long Polling等多种连接方式,以适应不同网络环境的需求。在项目中,我们通常会选择WebSocket,因为它能提供更好的性能和更低的延迟。 ...

    Strophejs是一个用于JavaScript的XMPP库

    1. **BOSH (Bidirectional-streams Over Synchronous HTTP)** BOSH是为了解决HTTP协议的非持久连接问题而设计的一种技术。由于JavaScript在浏览器中的限制,无法维持长连接,而BOSH通过定期发送HTTP请求模拟了持久...

    基于openfire服务器的xmpp协议的andorid端聊天daem

    4. **发送图片和声音**:对于多媒体消息,通常需要使用BOSH(Bidirectional-streams Over Synchronous HTTP)或者WebSockets来提供长连接,因为HTTP/HTTPS不适合频繁的短消息交互。图片和声音文件会被上传到服务器,...

    javascript XMPP strophe.JS,聊天室

    Strophe.js支持XML解析和构建,能够处理XMPP的XML流,并且有多种插件扩展其功能,如BOSH(Bidirectional-streams Over Synchronous HTTP)用于处理非WebSocket环境下的长连接。 四、构建Web聊天室的步骤 1. **设置...

    xmpp即时聊天

    6. **多路连接**:Strophe.js 实现了BOSH(Bidirectional-streams Over Synchronous HTTP),允许在HTTP上模拟双向通信,以解决Web端无法持久连接的问题。 7. **资源绑定**:每个连接到XMPP服务器的客户端都会被...

    openfire语音聊天

    它允许开发者通过WebSocket、BOSH(Bidirectional-streams Over Synchronous HTTP)或者Long-Polling等方式与XMPP服务器建立连接,从而实现聊天、群聊、文件传输、在线状态管理等功能。在我们的Openfire语音聊天项目...

    XMPP高级编程+使用JavaScript和jQuery

    2. **BOSH(Bidirectional-streams Over Synchronous HTTP)**:当WebSocket不支持时,BOSH可以作为替代方案,通过HTTP长轮询实现类似WebSocket的实时通信效果。 3. **jQuery UI和Bootstrap**:这些前端框架可以帮助...

    openfire_3_8_1.zip

    - **跨域通信**:通过XMPP-XMPP、HTTP代理和BOSH(Bidirectional-streams Over Synchronous HTTP)等方式实现跨域即时通讯。 - **插件扩展**:通过插件机制,可以添加各种功能,如视频会议、文件共享、实时协作工具...

    delivery-boy:使用 BOSH 传输协议的消息传递服务

    "送货员"是一个专为实现这一目标而设计的服务,它利用了BOSH(Bidirectional-streams Over Synchronous HTTP)协议。BOSH是一种增强型的HTTP长轮询技术,它允许客户端与服务器之间建立持久的连接,从而实现实时通信...

    xmpp strophe 极简例子

    它是专门为Web应用设计的轻量级XMPP客户端库,支持WebSocket、BOSH(Bidirectional-streams Over Synchronous HTTP)等多种连接方式,使得在浏览器中实现XMPP成为可能。在JavaScript环境中,strophe.js提供了易于...

Global site tag (gtag.js) - Google Analytics