XMPP学习3-IM即时消息

来源:互联网 发布:边伯贤2017知乎 编辑:程序博客网 时间:2024/04/29 09:59

IM

IM(Instant Meassge),核心是提供网络上从一个地方到另一个地方的快速路由信息的能力,因此,XMPP 服务器被优化用来在很小的延迟里处理大量的相对小的消息。

消息投递

XMPP服务器连接方式如下(无中间服务器跳跃)
这里写图片描述
消息传递流程:
1 发起用户客户端通过client-to-server XML流推送消息节到自身服务器
2 发起用户服务器在节上贴上from地址的邮戳,并检查to地址
3 发起用户服务器通过server-to-server XML流路由消息到目的用户服务器(无中间服务器跳跃)
4 目的服务器接收到消息节,服务器检查目的用户是否在线,如果在线,服务器立即通过server-to-client XML 流传递
消息到目的用户的在线设备中的一个或多个
特殊投递
chat 和 normal 消息被接收人的服务器以一种特定的方式处理:如果消息是投递到账户的 bare JID(裸JID),服务器立即把消息传递给当前与账户关联的优先级最高的资源。

聊天状态通告

聊天状态描述了你所参与的对话,在消息节中嵌入相关的聊天状态元素来进行对话中的状态改变。
示例:

<message from="user1@ejabberd.org"                     to="user2@nassue.org"                     type="chat">         <body>Hi Daye Nihao!</body>         <active xmlns="http://jabber.org/protocol/chatstates"/></message>

状态如下:
1 starting 某人开始一个对话,但是你还没有参与进去
2 active 你正参与在对话中,当前没有组织消息,而是在关注
3 composing 你正在组织一个消息
4 paused 你正在组织一个消息,但由于某些原因停止组织消息
5 inactive 你一段时间没有参与这个对话
6 gone 你参与的对话已结束(例:你关闭了聊天窗口)
状态转变图
这里写图片描述

格式化消息

XMPP让你能够自定义消息的外观或表达,利用Html子集或者CSS格式文本,包括许多流行的风格格式,包括颜色、字体、文字大小、字体粗细(例如,粗体)和字体风格(例如,斜体)、字体边缘、文本对齐(例如,居中)、和文本装饰(例如,下划线)。
示例:

<message from="suke@skh.whu.edu.cn"          to="beta@skh.whu.edu.cn"          type="chat">         <body>I love this movie I saw last night, it's awesome!</body>         <html xmlns="http://jabber.org/protocol/xhtml-im">            <body xmlns="http://www.w3.org/1999/xhtml">               <p>                  I <em>love</em>, this new movie I saw last night,it's <strong>awesome</strong>!               </p>           </body>        </html></message>

阻止和过滤通讯

阻止-一个简单方法
需阻止某用户通讯时,若服务器支持简单通讯阻止,只需要向自己服务器发送一个适当的 IQ-set即可:

<iq from="user1@ejabberd.org/Psi"         id="yu4er81v"         to="user1@ejabberd.org"         type="set">     <block xmlns="urn:XMPP:blocking">         <item jid="user2@nassue.org"/>     </block></iq>

意味着user2无法用任何方法获取user1的在线信息,user1服务器会忽略所有来自user2的<message/>以及应答IQ-get或IQ-set为<service-unavailable/>,而且会阻止user1向user2发送消息或者IQ请求,并返回<not-acceptable/>错误
在通 简单讯阻止中 ,需要解封时,也只需要向自己服务器发送一个适当的 IQ-set即可:

<iq from="user1@ejabberd.org/Psi"         id="ng23h57w"         to="user1@ejabberd.org"         type="set">     <unblock xmlns="urn:XMPP:blocking">         <item jid="user2@nassue.org"/>     </unblock></iq>

高级阻止与过滤
通过隐私列表实现,隐私列表是一个针对所有交通匹配的规则列表,包括进来的和出去的

<list name="mylist">       <item type="jid" value="user2@nassue.org" action="deny" order="1">             <iq/>             <message/>             <presence-out/>       </item>       <item type="group" value="C208" action="deny" order="2">             <presence-in/>         </item>         <item action="allow" order="3"/></list>
0 0