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>
- XMPP学习3-IM即时消息
- Android IM、IOS IM、XMPP协议、即时消息推送解决方案
- RFC3428 IM(即时消息)
- xmpp IM
- iOS-IM From XMPP.3 XMPP登录
- Android基于XMPP Smack Openfire下学习开发IM
- IM MMS SMS XMPP
- iphone jabber XMPP im
- XMPP实现IM
- IM------XMPP协议
- IM 与 XMPP
- IM开发【3】 - XMPP协议的命名空间
- IM开发【3】 - XMPP协议的命名空间
- 创建你自己的高性能即时消息IM服务器
- Android-IM使用imui组件结合JMessage实现即时消息对话
- 即时消息
- 开发你自己的XMPP IM
- 开发你自己的XMPP IM
- Linux common commands
- GCD-异步全局队列
- iOS 域名解析
- 配置Project分环境打包时遇到的问题
- Oracle 数据字典详解
- XMPP学习3-IM即时消息
- remote: Permission to CocoaPods/Specs.git
- 气泡法排序
- 零碎知识总结
- role属性解析
- Mpc8306开发环境的搭建
- No3.终止线程
- fmdb 数据库的基本操作
- Git 的origin和master分析