概要

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

1.IMPPInstantMessagingAndPresenceProtocol

2.PRIMPresenceAndInstantMessagingProtocol)不再使用

3.SIMPLESessionInitiationProtocolforInstantMessagingandPresenceLeveragingExtensions

4.XMPPExtensibleMessagingandPresenceProtocol

XmppExtensibleMessagingandPresenceProtocol)是基于可扩展标记语言(XML)的协议,用于即时消息(IM

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

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

(1)域名(domainidentifier);

(2)节点(nodeindentifier);

(3)源(resourceindentifier)。

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

XMPP消息格式

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

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

1.消息(Message)元素

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

To:标识消息的接收方

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

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

Type:消息类型

结构:

<MessageTo='alex@jabber.org/contact'Type='chat'><Body>helloalex</Body></Message>


2.状态(Presence)元素

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

结构:

<PresenceFrom='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

结构:

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


XMPP工作机制

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

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

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

<iqtype='get'from='user@server'><queryxmlns='jabber:iq:roster'/></iq>


返回报文

<iqquery='result'to='user@server'><queryxmlns='jabber:iq:roster'><itemjid='friend1@server’/><itemjid='friend2@server'/></query></iq>


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

<presencefrom='user@server'><presencefrom='user@server'to='friend1@server'><presencefrom='user@server'to='friend2@server'>


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

<presenceto='user@server'from='friend1@server'><presenceto='user@server'from='friend2@server'>


5.user与好友通信聊天

<messageform='user@server'type='chat'to='friend1@server'><body>helloboy</body></message><messageform='friend@server'type='chat'to='friend1@server'><body>hellogirl</body></message>



更多相关文章

  1. Android状态栏上添加按钮(程序部分)
  2. Android(安卓)语音通话模块介绍(一) 开源的SIP协议栈
  3. Android(安卓)Launcher3 禁止用户拖动图标创建文件夹,控制拖动图
  4. Android进阶之路 - 软键盘顶起解决方案
  5. Flutter开发中问题汇总贴(持续更新中)
  6. Android(安卓)activity exported属性理解
  7. android 设置状态栏颜色和字体颜色
  8. i.MX6 安装交叉编译器
  9. Android防止用户快速点击

随机推荐

  1. [Android实例教程] 教你如何拍照+相册选
  2. Android(安卓)GpioService从app到驱动
  3. Android:Layouts介绍
  4. APK瘦身神器:Android App Bundles-让应用
  5. 大领导又给小明安排任务——Android触摸
  6. Android:利用 LeakCanary 来检查 Android
  7. Android layout之优化:使用include和merge
  8. Android framework : UI刷新机制:Vsync an
  9. Android(安卓)Adapter体系介绍
  10. World of Goo(粘粘世界)即将登陆 Android M