在架构中,连接管理器(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>尽管大多数时间可以随时推送数据到对端,但是,如果一方刚刚推送完数据,则需要等一个网络来回的时间才能推送下一个数据