- 学习XMPP就是拥有位当前应用程序添加实时,推送,社交功能所需的工具。虽然浏览器不支持XMPP通讯,但是我们可以通过BOSH技术解决。
- 一个XMPP网络包含如下
服务器:为XMPP节提供路由,是否支持server-Server通讯也是很重要的特性,常见的服务有openfire,tigase,m-link等
客户端:一般为人类驱动的实体,也可以是自动化的机器人实体(聊天机器人)
组件:XMPP扩展(XEP-0114)使用该扩展协议可以实现服务实现无关的扩展,组件作为服务器内部可单独寻址的实体
插件:特定服务实现下的扩展,不大可能会移植
- XMPP寻址
JID:格式 节点@域/资源
- XMPP节
XMPP通讯是以XML为基础,研究XMPP协议的话必须要了解他的一些基础元素和属性
xmpp流由两份xml组成,通讯的每个方向都有一份,根元素为stream:stream
子元素为可路由的节点和与流相关的*元素,通用元素
presence 相关出席信息
message 消息
iq 信息与查询
- XMPP连接的生命周期 具体可以看标准协议RFC-6120
- 如何在web中使用xmpp
以前更新数据使用定时刷新,使用AJAX改善了体验,实质上没有变化。我们可以使用长轮询技术(客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求,ie上用iframe,别的浏览器用xhr来实现)达到更实时的更新效果。XMPP中这种技术,被称之为BOSH,其实Comet和反向http也是类似的东西。很多xmpp服务器中内置该功能,也有单独的BOSH连接管理服务BOSH帮助http客户端建立一个新的XMPP会话,然后把XMPP节包装到一个特殊的body元素通过http回传,这样一来http应用程序就可以控制一个真正的xmpp会话,由于长轮询的高效率和低延迟,因此其效果和原生TCP连接差不多。
使用长轮询技术需要使用js进行跨域访问,目前我们通过Strophe的JS类库实现了轻松优雅的在http下访问xmpp