XMPP 学习笔记二 OpenFire框架与与XMPP协议基础知识
来源:互联网 发布:html5数据报表css 编辑:程序博客网 时间:2024/05/16 07:37
OpenFire框架
- Pubsub:Publish/Subscribe,这使得xmpp实体能够在pubsub服务上创建nodes(topics),并且发布信息。一个事件通知将广播到所有订阅了这个节点的实体上。
- Pep:(Personal EventingProtocol)使用XMPPpublish-subscribe协议广播状态改变事件、及时消息和出席帐户到其他用户。
- Stun:为p2p会话提供地址发现服务,如:媒体传输和UDP包的收发。
- Router:内部的路由,把相应的包路由给相应的处理器。
- Muc:(Multi-User Chat)用户可以交换文本信息在room或者channel上下文中,版主或者管理员有权踢除用户和禁止用户。
XMPP协议
参考:http://blog.163.com/guomaolin_gavin/blog/static/19961830720125261015351/
http://xmpp.org/rfcs/rfc6121.html
XMPP工作说明
client 的 jabber消息通过server转发
- client 连接到 server的证书认证
- server 利用本地目录系统
- client向server 查询目标状态
- server查找,连接、相互认证
- client交互
XMPP地址格式
JID 实体地址
一个实体在XMPP网络结构中被称为一个接点,它有唯一的标示符jabber identifier(JID),即实体地址,用来表示一个Jabber用户或一个聊天室.
一个有效的JID包括一系列元素:
- 域名(domain identifier);
用来表示接点不同的设备或位置,这个是可选的,如user1@serverl - 节点(node identifier);
- 源(resource identifier).
它的格式是node@domain/resource,node@domain,类似电子邮件的地址格式.
resource可以不用指定,但user1在登录到这个Server时,它的的JID可能是user1@serverl、exodus(如果a用Exodus软件登录),也可能是user1@serverl/psi(如果a用psi软件登录).资源只用来识别属于用户的位置或设备等,一个用户可以同时以多种资源与同一个XMPP服务器连接。
JID 格式:JID=[node”@”]domain[“/”resource]
XMPP消息格式
Message
两个jabber用户之间发送信息。Jsm(jabber会话管理器)负责满足所有的消息,不管目标用户的状态如何。如果用户在线jsm立即提交;否则jsm就存储。
<message from="user1@jabber.org/contact" to= "user2@jabber.org/contact" type ="chat"><body>你好,在忙吗</body></message>
Presence
用户的状态,如:online、away、dnd(请勿打扰)等。当用户离线或改变自己的状态时,就会在stream的上下文中插入一个Presence元素,来表明自身的状态.
<presence from ="lily@jabber.com/contact" to = "user2@jabber.com/contact"><status>Online</status></presence>
元素可以取下面几种值:
Probe :用于向接受消息方法发送特殊的请求
subscribe:当接受方状态改变时,自动向发送方发送presence信息。
IQ
一种请求/响应机制,从一个实体从发送请求,另外一个实体接受请求,并进行响应.例如,client在stream的上下文中插入一个元素,向Server请求得到自己的好友列表,Server返回一个,里面是请求的结果.
主要的属性是type。包括:
- Get :获取当前域值。
- Set :设置或替换get查询的值。
- Result :说明成功的响应了先前的查询。
- Error: 查询和响应中出现的错误。
<iq from ="lily@jabber.com/contact" id="1364564666" Type="result">
XMPP 流传输协议
基于XML FreeEIM流传输的即时通讯扩展应用。
XMPP工作机制:
例如:一个终端名字是Remeo,通过服务器montague.lit与其他的用户相连,其他的用户通过服务器juliet@capulet.lit建立连接。
第一步Romeo开始通过发送一个stream包与服务器montague.lit取得联系,这一步包含了鉴权,登录等等。
第二步Romeo获取了他的联系人列表,通过向服务器montague.lit发送字段请求,按照下面的协议。
<iq type="get" from="romeo@montague.lit/pda"><query xmlns="jabber:iq:roster"/></iq><iq type="result" to="romeo@montague.lit/pda"><query xmlns="jabber:iq:roster"><item jid="juliet@capulet.lit"/><item jid="mercutio@shakespeare.lit“/><item jid="benvolio@shakespeare.lit" /></query></iq>
第三步Romeo发送了一个presence请求到服务器montague.lit,然后会将这个信息广播到他的所有好友。
<presence from="romeo@montague.lit/pda" /><presence from="romeo@montague.lit/pda" to="juliet@capulet.lit" /><presence from="romeo@montague.lit/pda" to="mercutio@shakespeare.lit" /><presence from="romeo@montague.lit/pda" to="benvolio@shakespeare.lit" />
第四步如果Romeo的联系人都在线,就会将presence回复给Romeo,告知自己的状态。
<presence to="romeo@montague.lit/pda" from="juliet@capulet.lit/balcony" /><presence to="romeo@montague.lit/pda" from="juliet@capulet.lit/chamber" /><presence to="romeo@montague.lit/pda" from="mercutio@shakespeare.lit/home" />
第五步Romeo和Juliet开始交换信息,进行聊天。
<message from="romeo@montague.lit/pda" to="juliet@capulet.lit" ><body>hi!</body></message><message from="juliet@capulet.lit/balcony" to="romeo@montague.lit/pda" > <body>hi yourself!</body></message>
以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从到构成了一个完整的XML文档。
其中的stream标签就是所谓的XML Stream。
在与中间的那些…这样的XML元素就是所谓的XML Stanza(XML节)。
XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端发送XML Stanza,一个接一个的。服务器根据客户端发送的信息以及程序的逻辑,发送XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候都有可能从一个方发信给另外一方。通信的最后阶段是关闭流,关闭TCP/IP连接。
参考:
http://blog.csdn.net/lsh6688/article/details/9209215
http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378956.html
- XMPP 学习笔记二 OpenFire框架与与XMPP协议基础知识
- Openfire与XMPP协议
- Openfire与XMPP协议
- Openfire与XMPP协议
- Openfire与XMPP协议
- Openfire与XMPP协议
- Openfire与XMPP协议
- Openfire与XMPP协议
- Openfire与XMPP协议
- Openfire与XMPP协议
- Openfire与XMPP协议
- Openfire与XMPP协议
- Openfire分析之一:Openfire与XMPP协议
- XMPP协议之Openfire安装与使用
- XMPP协议之Openfire安装与使用
- XMPP协议学习笔记二
- XMPP协议学习笔记二
- XMPP协议学习笔记(二)
- Exchange 2010 Ps 之邮箱稽核和稽核内容导出!
- 使用UE4实现HTC Vive设备的简单操作
- 视屏播放快进快退的逻辑处理
- "围观"设计模式(26)--行为型之备忘录模式(Memento Pattern)
- linux——信号量、共享内存、消息队列的用法区别(更新)
- XMPP 学习笔记二 OpenFire框架与与XMPP协议基础知识
- C#控制台 分部类,partial
- CSAPP: Architecture Lab
- 可重入函数与不可重入函数(转)
- 打开MySQL数据库远程访问的权限
- Bitmap高效加载图片
- Android之LayoutParams的用法
- Java基础知识三
- Dynamics CRM 2016 Refresh Issue