Android:Xmpp协议的简单分析

概要

IETF中,把IM协议分为四种协议:

1.IMPPInstant Messaging And Presence Protocol

2.PRIMPresence And Instant Messaging Protocol )不再使用

3.SIMPLESession Initiation Protocol for Instant Messaging and Presence Leveraging Extensions

4.XMPPExtensible Messaging and Presence Protocol

XmppExtensible Messaging and Presence Protocol)是基于可扩展标记语言(XML)的协议,用于即时消息(IM

一个实体在Xmpp网络结构中被称为节点,它拥有唯一的标识符jabber identifierJID),即实体地址,用来表示一个Jabber用户,也可以表示其他内容,例如一个聊天室。

一个有效的JID包括一系列元素:

(1)域名(domain identifier);

(2)节点(node indentifier);

(3)源(resource indentifier)。

格式:node@domain/resourcenode@domain类似于电子邮件的地址格式。

XMPP消息格式

客户端和服务器端的交互要经由XMLXMPP中定义了 3个顶层元素:

消息(Message)元素,状态(Presence)元素,IQInfo/Query)元素 

1.消息(Message)元素

用于在两个Jabber用户之间发送消息,JSMJabber会话管理器)负责满足所有的消息,不管目标用户的状态如何,如果用户在线JSM立即提交,否则JSM就存储

To:标识消息的接收方

From:发送方的名字或者标识

Body:包含要提交给目标用户的信息

Type:消息类型

结构:

<Message To='alex@jabber.org/contact' Type='chat'>
    <Body>hello alex</Body>
</Message>


2.状态(Presence)元素

用来表明用户的状态,如:onlineawaydnd(请勿打扰)等。当用户离线或改变自己的状态的时候,就会在stream的上下文中插入一个Presence元素,来表明自身的状态。

结构:

<Presence From='alex@jabber.org/contact' To='wan@jabber.org/contact'
    <Status>online<Status>
</Presence>


3.IQInfo/Query)元素

IQ一种请求/响应机制,从一个实体从发送请求,另外一个实体接受请求,并进行响应。如:ClinetStream的上下文中插入一个元素,向Server请求得到自己的好友列表,Server返回一个节点,里面是请求的结果。

IQ主要属性是Type,包括:Get获取当前域值,Set设置或替换Get查询的值,Result说明成功响应了先前的查询,Error查询和响应中出现的错误

IQ元素用户不同的目的,它们之间通过不同的命名空间来加以区分。在Jabber/XMPP消息协议里有许多的命名空间。

常用的命名空间(namespace):“jabber:iq:register”,“jabber:iq:auth”,“jabber:iq:roster

结构:

<IQ From='alex@jabber.org/contact' id='123456' Type='Result'/>


XMPP工作机制

例如:一个用户user,通过服务器server与其他用户建立连接,

1.user开始通过发送一个<stream/>包与服务器server建立连接,包括用户鉴权,登录等。

2.user取得他的联系人列表,通过向服务器server发送<IQ/>字段请求,按照协议

<iq type='get' from='user@server'>
    <query xmlns='jabber:iq:roster'/>
</iq>


返回报文

<iq query='result' to='user@server'>
    <query xmlns='jabber:iq:roster'>
        <item jid='friend1@server’/>
        <item jid='friend2@server'/>
    </query>
</iq>


3.user发送一个presence请求服务器serverserver将这条信息广播到user的所有好友

<presence from='user@server'>
<presence from='user@server' to='friend1@server'>
<presence from='user@server' to='friend2@server'>


4.如果user的好友在线,会将presence返回给user,告知自己的状态

<presence to='user@server' from='friend1@server'>
<presence to='user@server' from='friend2@server'>


5.user与好友通信聊天

<message form='user@server' type='chat' to='friend1@server'>
    <body>hello boy</body>
</message>
<message form='friend@server' type='chat' to='friend1@server'>
    <body>hello girl</body>
</message>


 


转载于:https://my.oschina.net/alexwan/blog/369310

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值