【1】org.xmpp.packet.Packet(数据包):
1)intro: 一个 XMPP数据包(也被称为 数据节)。每个数据包由 dom4j 元素来支持。有一系列易于操作元素(Element)的便捷方法,也可以直接访问和操作元素(Element);
2)有3个核心的数据包类型:
type1)org.xmpp.packet.Message(public class Message extends Packet):用于在用户间发送数据;Message 类型的数据包有多种类型:
type1.1)normal:email中使用的普通文本;
type1.2)chat:聊天中使用的传统简短文本消息
type1.3)groupchat:发送给 群组聊天的聊天消息;
type1.4)headline:滚动字幕演示的 文本消息;
type1.5)error:表明消息错误;
type2)org.xmpp.packet.Presence(public class Presence extends Packet):包含用户在线消息 或 被用于管理 在线状态订阅;
intro: Presence 数据包(在线数据包),该数据包用于表达 一个实体的当前网络可用性 和 通知其他实体 某 实体的网络可用性; Presence 数据包也被用于 协商和管理 其他实体对 某实体网络可用性的订阅情况;
type2.0)available: type == null 表示 实体网络可用性可用;(非离线状态)
type2.1)unvailable:通常由聊天接口使用的 短文本消息;
type2.2)subscribe:发送方希望订阅接收方的网络可用性;
type2.3)subsribed:发送方允许 接收方发送接收 发送方的网络可用性;
type2.4)unsubscribe:发送方没有订阅接收方的网络可用性;
type2.5)unsubscribed: 网络可用性订阅请求被拒绝 或 曾经授权的订阅 也被删除;
type2.6)probe: 请求 某实体的当前网络可用性,只应该在代表用户的服务器上 产生;
type2.7)error:当处理或 传递以前发送的 网络可用性 数据节 的时候,会发生错误;
type2.8)Presence.Show(内部枚举类): show 值是默认的,表明实体的网络可用性是 true。可用值如下:
value1)chat:实体或资源正在线聊天;
value2)away:实体或资源暂时离开;
value3)xe:实体或资源离开较长时间(离开较长时间);
value4)dnd:实体或资源 忙碌,请不要打扰;
type3)org.xmpp.packet.IQ(public class IQ extends Packet):交换信息 和 使用 request/response 协议执行查询操作;
intro to IQ数据包: IQ(消息/查询)数据包。使用 IQ 数据包 在服务器上 获取和设置消息, 包括 验证消息,花名册操作,创建用户。每个 IQ 数据包 有一个特定类型来表明 将会执行哪种类型的动作: get, set, result, 还是 error;其中 客户端请求(request)==[set or get], 而服务器响应(response)== [result or error]
type3.1) get:该 IQ 数据包是一个信息请求;
type3.2) set:该 IQ 数据包 提供所需数据,设置新值 或 替换已存在的 值;
type3.3) result:该 IQ 数据包 作为 get 或 set 请求 执行成功的响应;
type3.4) error:当 处理 和 传递 以前发送的 get 或 set 请求的时候,会发生错误;

【2】JID(public class JID implements Comparable<JID>, Serializable {)
1)intro: JID 作为 XMPP 地址,由node,domain,resource 构成;domain是必须元素,而 node 和 resource 是可选的;jid = [ node "@" ] domain [ "/" resource ]
2)看个荔枝:
user@example.com
user@example.com/home
example.com
3)JID 的每个构成部分最大长度为 1023,所以3个部分加起来最大是  3071 字节, 因为还有 @ 和 / 两个字符;
4)JID 实例是不变的(线程安全的),多个线程可作用于该数据而不用考虑其他线程会改变其数据;
【3】PacketInterceptor(数据包拦截器)public interface PacketInterceptor
1)intro:一个数据包拦截器 封装了一个动作,在 数据包被SocketReader 接收之前或之后 和 当数据包在 SocketConnection 被发送的时候,该动作会基于该数据包被触发;
2)动作类型分为两大类:
type1)通过抛出异常拒绝数据包的拦截器(只有当数据包没有被处理的情况)
type2)动态转换数据包内容的拦截器;
3)可以在运行时安装或移除任何数量的拦截器。可以进行全局安装或针对每个用户安装。全局拦截器会首先运行,接着会依username 安装拦截器;
4)对某个数据包触发拦截器。该拦截器要么修改数据包,要么抛出异常PacketRejectedException 以 阻塞它 不让其发送或被处理;
5)只有 当  processed 为 false的时候,才可以抛出异常,这意味着 读取的数据包还没有被处理 或 数据包还没有被发送。如果异常抛出信息为 阅读数据包,则 数据包发送者接受到一个错误的响应。 如果 异常抛出信息为接收数据包,则一切正常;
Attention)注意到: 对于每个数据包,每一个拦截器都要被调用两次:一次在 处理完成之前,一次在 处理完成之后。 
void interceptPacket(Packet packet, Session session, boolean incoming, boolean processed)  throws PacketRejectedException;
【4】Session(org.jivesoftware.openfire.session.Session) public interface Session extends RoutableChannelHandler
1)intro: session 代表 服务器 和 客户端的一个连接(c2s) 或是 服务器和服务器间的连接(s2s)以及 服务器和 一个 组件的连接。 c2s 连接 与 验证和用户账号相关联,而 s2s 连接 有 可选验证关联 但没有与用户的关联。
2)从 session 获取对象管理器 以 访问 服务器资源;
method1)public JID getAddress(): 返回数据包处理器的地址。——获取用户地址。类似核心服务器数据包路由器的服务会使用 该地址 决定 是否一个数据包应该被发送给处理器。服务器所代表的处理器 应该使用 泛型 服务器主机地址(如 server.com)

xmpp协议框架包介绍:org.xmpp.packet.Packet+JID+PacketInterceptor+Session相关推荐

  1. XMPP协议的原理介绍

    XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测.它在促进服务器之间的准即时操作.这个协议可能最终允许因特网用户向因特网上的其他任何人发送 ...

  2. XMPP协议实现原理介绍

    原文地址为: XMPP协议实现原理介绍 本文介绍XMPP协议原理及相关信息. XMPP协议简介   XMPP(Extensible Messageing and Presence Protocol:可 ...

  3. xmpp协议抓包_xmpp协议使用iptool抓包工具分析

    下面是使用iptool工具抓包的协议,留作以后学习xmpp协议. s <?xml version="1.0"?> r <?xml version='1.0'?&g ...

  4. xmpp协议抓包_在MAC下基于Openfire和Spark的XMPP协议实现

    XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性.因此,基于XMPP的应用具有超强的可扩展性.经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及 ...

  5. xmpp协议详解一:xmpp基本概念

    概述 XMPP是一个开放式的XML协议,设计用于准实时消息和出席信息以及请求-响应服务. 通用的架构 通常采用客户端服务器架构进行实现,其中客户端通过TCP方式使用XMPP访问服务器,服务器之间也采用 ...

  6. xmpp协议抓包_开源网络抓包与分析框架学习-Packetbeat篇

    开源简介 packbeat是一个开源的实时网络抓包与分析框架,内置了很多常见的协议捕获及解析,如HTTP.MySQL.Redis等.在实际使用中,通常和Elasticsearch以及kibana联合使 ...

  7. xmpp协议抓包_抓包工具有哪些?大佬们常用的18款抓包工具就是这些

    最近很多同学,说面试的时候被问道,有没有用过什么抓包工具,其实抓包工具并没有什么很难的工具,只要你知道你要用抓包是干嘛的,就知道该怎么用了!一般对于测试而言,并不需要我们去做断点或者是调试代码什么的, ...

  8. XMPP协议简单介绍

    2019独角兽企业重金招聘Python工程师标准>>> 由于博客迁移至www.coderyi.com,文章请看http://www.coderyi.com/archives/434 ...

  9. 【XMPP 协议介绍】

    中文名 可扩展通讯和表示协议 外文名 Extensible Messaging and Presence Protocol 外语缩写 XMPP 功    能 XMPP用TCP传的是XML流 XMPP是 ...

最新文章

  1. 在C#中用COM操作CAD
  2. 分享:python,限制任意函数,线程的执行时间或根据条件终止.
  3. usb接口供电不足_电脑USB接口不够用?来试试ORICO条纹hub扩展器吧
  4. python提取txt中指定内容_提取视频中的音频——python三行程序搞定!
  5. 80后创业故事之:兄弟散伙,创业失败(转)
  6. Linux:文件描述符
  7. 11、Node.js 函数
  8. 6 计算机组成原理第五章 中央处理器 CPU功能和结构 指令执行过程
  9. java bitset_Java BitSet length()方法与示例
  10. hbuilderx制作简单网页_简单的手机网页制作教程
  11. 95-864-040-源码-HDFS-Flink 和 HDFS 的交互
  12. SpringMVC中ModelAndView对象与“视图解析器”
  13. speedoffice(Word)文档中如何插入图片
  14. SAP Exchange Rate 外币汇率的设置
  15. 5G手机开打价格战,4G手机将被加速淘汰
  16. win7截屏快捷键未在计算机上运行,修复win7“截图工具当前未在计算机上运行”的方法...
  17. Win10 日期/时间修改
  18. 1+x2022年9月16日实操题答案
  19. 跟偶一起做:击退眼睛疲劳的五大运动
  20. 低压无感BLDC方波控制方案 反电动势和比较器检测位置 带载满载启动

热门文章

  1. P3293 [SCOI2016]美味 主席树 + 伪01trie
  2. 【AT987】高橋君【组合数】【莫队】
  3. Monster Hunter(2020南京M)
  4. Max Sum Plus Plus HDU - 1024
  5. CodeForces730E Award Ceremony(拓扑排序+结论)
  6. CF750G New Year and Binary Tree Paths(数位dp二进制+数学)
  7. YbtOJ#652-集合比较【Treap】
  8. P2048-[NOI2010]超级钢琴【RMQ,堆】
  9. P2580-于是他错误的点名开始了【Trie,字符串】
  10. DI 之Spring更多DI的知识