初识XMPP

转载:http://blog.csdn.net/bluebeach/article/details/5890699


XMPP的前身是Jabber,它是在开源社区诞生的即时通讯协议。IETF在2002年成立了XMPP的标准化小组,在2004年发布了RFC3920, 3921, 3922和3923。从而规范了XMPP协议。现在问世的很多通讯软件都是基于XMPP的,比如Google Talk,Facebook chat,网易泡泡等等。

优势

1. 扩展性强:XMPP是基于XML的。XMPP core本身只规定了基本的逻辑和数据格式,大部分的业务逻辑都是由extension来实现的。

2. 标准化:由于XMPP被IETF标准化成为业界标准,大公司很愿意接纳并使用它,而不必担心被竞争对手所控制。

3. 开放性,成熟的开源社区:XMPP已经有了很多开源的client/server实现。使得在XMPP基础上开发变的很容易。

缺点

1. 冗余的传输数据

据统计,XMPP server间通信70%的数据是Presence data。Presence data主要是广播某个用户上线或下线的信号。而其中60%的传输数据是冗余的。现在正在研究新的协议来解决这一问题。

2. 传输二进制数据效率不高

XMPP协议本身无法传输二进制数据。所以必须想其他办法来传输(会用另外篇幅介绍)。这使得XMPP传输二进制数据效率不高。目前最好的协议是由Google提出的Jingle协议。Jingle已经在Linux的Pidgin,Empathy中广泛使用了。Jingle在VoIP中用于传输多媒体数据流。

 

XMPP的结构

初识XMPP_第1张图片

XMPP从下到上分四层,分别是TCP,TSL,SASL和XMPP层。其中TCP保证了这是一个可靠的链路。TSL(Transport Layer Security)主要采用STARTTLS加密算法保证传输数据的安全。SASL(Simple Authentication and Security Layer)用来认证客户端的真实有效性。

初识XMPP_第2张图片

XMPP网络主要有三种元素,Client,Server和Gateway。Gateway是一种特殊的Server,用于和其他IM网络服务器通信,如MSN,QQ等。Server可以同Client,也可以同Server通信,通信都是使用XMPP协议。

 

命名方式

XMPP的命名方式称为JID(Jabber ID),它很像一个邮件地址,在末尾可以添加一个resource id来区分同台机器的不同客户端的登录信息。

[ node “@”] domain [“/” resource]

比如[email protected]/pidgin

 

XMPP core

1. XML Stream: XML的顶层节点。代表了一个完整的会话。

2. XML Stanzas: XML的第二层节点。共三种:, , 。

Message: P2P message. 
Presence: 广播状态改变,如某人上线. 
Iq: 查询信息。很类似于DBus中常用的GetProperty/SetProperty.

其中每种Stanzas又有五种属性:

To: 目标接收者. 
From: 发送者. 
Id: Session id. 
Type: 根据Stanzas不同,type不同. 
xml:lang: XML payload的语言.

 

举例

登录

Client


<stream:stream
    to='example.com' 
    xmlns='jabber:client' 
  xmlns:stream='http://etherx.jabber.org/streams' 
    version='1.0'>

Server


<stream:stream
    from='example.com' 
    id='someid' 
    xmlns='jabber:client' 
    xmlns:stream='http://etherx.jabber.org/streams' 
    version='1.0'>

查询好友列表


    


    
        <item jid="[email protected]"
            name='Mercutio' 
            subscription='from'> 
            Friends 
            
        <item jid="[email protected]"
            name='Benvolio' 
            subscription='both'> 
            Friends 
        
    

更改状态


    away 

发送消息

<message
    to='[email protected]
    from='[email protected]/balcony' 
    type='chat' 
    xml:lang='en'> 
    Wherefore art thou, Romeo? 

查询好友


    
        <item jid="[email protected]"
        name='Nurse'> 
        Servants 
        
    

 

XMPP扩展

XMPP数量庞大的扩展是XMPP的重要组成部分。

其中基本扩展有

[1] XEP-0004 Data Forms 
[2] XEP-0030 Service Discovery 
[3] XEP-0076 Malicious Stanzas 
[4] XEP-0053 XMPP Registrar 
[5] XEP-0090 Entity Time 
[6] XEP-0092 Software Version 
[7] XEP-0114 Jabber Component Protocol 
[8] XEP-0115 Entity Capabilities 
[9] XEP-0124 HTTP Binding 
[10] XEP-0138 Stream Compression 
[11] XEP-0154 User Profile

应用扩展有

[1] XEP-0045 Multi-User Chat 
[2] XEP-0047 In-Band Bytestreams (IBB) 
[3] XEP-0049 Private XML Storage 
[4] XEP-0055 Jabber Search 
[5] XEP-0060 Publish-Subscribe 
[6] XEP-0077 In-Band Registration 
[7] XEP-0083 Nested Roster Groups 
[8] XEP-0084 User Avatar 
[9] XEP-0107 User Mood 
[10] XEP-0146 Remote Controlling Clients 
[11] XEP-0163 Personal Eventing via Pubsub 
[12] XEP-0172 User Nickname

点对点扩展有

[1] XEP-0096 File Transfer 
[2] XEP-0003 Proxy Accept Socket Service 
[3] XEP-0166 Jingle 
[4] XEP-0167 Jingle Audio Content Description Format 
[5] XEP-0176 Jingle ICE Transport 
[6] XEP-0177 Jingle Raw UDP Transport 
[7] XEP-0180 Jingle Video Content Description Format 
[8] XEP-0181 Jingle DTMF 
[9] XEP-0183 Jingle Telepathy Transport Method

 

Resource

www.jabber.org


你可能感兴趣的:(xml,Stream,server,扩展,XMPP,compression)