http://blog.dormforce.net/est/archives/281

万圣节前夜,嘎嘎,写一篇XMPP的文章,主要来自Jabber官方的Technical Overview

Overview

XMPPJabber软件基金会开发,最早在Jabber上实现。Jabber项目由Jeremie Miller在1998年开始的一个免费、开源的项目,用于提供给MSN、Yahoo!的IM服务。由于XMPP是一种基于XML架构的开放式协议,在IM通讯中被广泛采用,已经得到了互联网工程任务组(IETF)的批准(RFC 3920|RFC 3921)。

IQ

即Information Query,是XMPP协议中一个类似HTTP的GET、POST的动词。比如说修改Jabber密码:

<iq type='set' to='jabber.org'>
<query xmlns='jabber:iq:register'>
<username>username</username>
<password>newpassword</password>
</query>
</iq>

JID

即Jabber ID,格式为:
[node@]domain[/resource]
node是用户名,domain是域;如果是Google Talk的话域就是 gmail.com;resource表示工作状态,Jabber允许在不同的地方同时登陆一个Jabber账号,用resource来表示不同的状态,可以自定义,GTalk目前版本定义的resource就是 Talk.v104C0F37955
例如:estbot@googlemail.com/AtWork

Disco

Service Discovery,一个Jabber服务器可能不止提供了IM服务,还提供了和其它IM互通网关、群聊等特性。

Stanza

一个XML片段

Roster

联系人名单

Presence

即隐身功能,把你的在线/离线状态只告诉一部分联系人

Subscription

订阅一个联系人的在线状态,通俗的讲就是添加好友。A给服务器发送一个presence消息,要subscribe B,那么相当于A要添加B为好友。

show

忙碌状态
away――在线,但不能马上联系上
chat――在线并有兴趣聊天
dnd――在线,但不想被打扰(“dnd”表示“do not disturb”)
xa――在线,但已经离开很长时间了(“xa”表示“extended away”)
GTalk里,绿色图标表示<show />,没有任何show的值,如果是红色图标则是<show>dnd</show>,只有这两种状态

status

好友的个性签名。好友的头像是通过X标签来获得的

vCard

联系人名片,见 RFC 2426

Jingle

Google定义的Jabber扩展,包含了p2p、语聊、文件传输、穿防火墙/NAT/Proxy等高级功能。例如File Transfer模块
libjingle file transfer

剩下的想起来了再添加,看RFC真是一件超级麻烦的事情,CSDN上还有Jabber协议的中文版本 :-)