XMPP与HTTP的比较:
HTTP客户端只能从服务器那里请求数据,除非服务器正在响应客户端请求,否则它不能向客户端发送数据;而XMPP 连接是双向的,只要该连接处于打开状态,任何一方在任何时候都可以向另一方发送数据,因此应用程序不必为获取更新而进行效率低下的轮询。
XMPP连接是对防火墙和NAT友好的,因为服务器到客户端通信所用的连接是由客户端发起的。
XMPP构建在TLS和SASL技术之上,它们为XMPP连接提供了牢固的加密和安全功能。
HTTP是一种无状态协议,而XMPP是有状态的。
长轮询:
使用Ajax可以在不刷新整个页面的情况下更新数据,即使如此,为达到实时通信的效果,仍然要定期的请求(或轮询)数据,如果太多客户端过快的轮询,服务器可能会变得缓慢。轮询的另一个问题是大多数的请求并没有接收到新数据。为了解决这一问题,便有了长轮询的技术。
HTTP客户端只能从服务器那里请求数据,除非服务器正在响应客户端请求,否则它不能向客户端发送数据;而XMPP 连接是双向的,只要该连接处于打开状态,任何一方在任何时候都可以向另一方发送数据,因此应用程序不必为获取更新而进行效率低下的轮询。
XMPP连接是对防火墙和NAT友好的,因为服务器到客户端通信所用的连接是由客户端发起的。
XMPP构建在TLS和SASL技术之上,它们为XMPP连接提供了牢固的加密和安全功能。
HTTP是一种无状态协议,而XMPP是有状态的。
长轮询:
使用Ajax可以在不刷新整个页面的情况下更新数据,即使如此,为达到实时通信的效果,仍然要定期的请求(或轮询)数据,如果太多客户端过快的轮询,服务器可能会变得缓慢。轮询的另一个问题是大多数的请求并没有接收到新数据。为了解决这一问题,便有了长轮询的技术。
长轮询是指将每个轮询请求的打开较长的时间。如果服务器上有新数据,那么服务器会立即应答,如果没有新数据,那么服务器将保持连接的打开状态,一旦新数据到达,它就最终会响应该请求。如果在一定时间之后没有新数据达到,服务器可以发回一个空的响应。一旦一个请求返回,客户端就会立即发送一个新的请求,整个过程重新开始。
管理连接:
XMPP连接可以持续任意长的时间,但HTTP请求却相当短命。连接管理器负责维护第三方的XMPP连接并通过HTTP长轮询技术提供对连接的访问。
浏览器和连接管理器使用一种名为BOSH的简单协议通过HTTP进行通信。实际上,BOSH帮助HTTP客户端建立一个新的XMPP会话,然后将XMPP节包装到一个特殊的<body>元素中通过HTTP来传送。连接管理器与XMPP服务器通信就像它是一个普通的客户端一样。这样一来,HTTP应用程序就能控制一个真正的XMPP会话。