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

【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)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dubbo面试题锦集

转载自 Dubbo面试题锦集1、默认使用的是什么通信框架&#xff0c;还有别的选择吗?2、服务调用是阻塞的吗&#xff1f;3、一般使用什么注册中心&#xff1f;还有别的选择吗&#xff1f;4、默认使用什么序列化框架&#xff0c;你知道的还有哪些&#xff1f;5、服务提供者能实现失…

spring-boot--整合thymeleaf模板

http://blog.csdn.net/li396864285/article/details/53811527

Zookeeper面试题锦集

转载自 Zookeeper面试题锦集1、zookeeper是什么框架&#xff1f;2、有哪些应用场景&#xff1f;3、使用什么协议&#xff1f;4、说说分布式一致性算法Paxos5、说一说选举算法及流程6、zookeeper有哪几种节点类型&#xff1f;7、zookeeper对节点的watch监听通知是永久的吗&#…

ReviewForJob(1)数据结构与算法分析引论

【1】 数学基础1.1&#xff09;本书将使用以下4个定义&#xff1a; 对上述定义的分析&#xff08;Analysis&#xff09;&#xff1a; - A1&#xff09;第一个定义是说T&#xff08;N&#xff09;的增长率小于等于f&#xff08;N&#xff09;的增长率&#xff1b;- A2&#x…

Spring MVC+layui(基于bootstrap)+t 新增功能(页面和数据传递)

为开发的规范&#xff0c;更易于扩充&#xff0c;将新增与列表页分开为:list.html、add.html list.html:<!DOCTYPE html> <html xmlns:th"http://www.thymeleaf.org"> <head> <meta charset"utf-8"></meta> <meta name&…

2017派卧底去阿里、京东、美团、滴滴带回来的面试题

转载自 2017派卧底去阿里、京东、美团、滴滴带回来的面试题及答案一&#xff0c;阿里巴巴面试题二&#xff0c;京东面试题三&#xff0c;美团面试题四&#xff0c;滴滴面试题五&#xff0c;本次卧底面试得到的结论通过面试题来看&#xff0c;可以看出目前互联网公司面试考点为&…

ReviewForJob(2)算法分析

【0】README1)本文旨在review 算法分析的几个算法问题 附带源码&#xff1b;【1】最大子序列和问题的解&#xff08;两种解法——分治法联机算法&#xff08;推荐&#xff09;&#xff09;【1.1】分治法1&#xff09;intro&#xff1a;其思想是把问题分成两个大致相等的子问题&…

java并行程序基础

1 进程 1 进程和线程之间的关系&#xff1a;进程是线程的容器。2 线程 1 线程的执行流程&#xff1a; **线程调用start(&#xff09;**方法时&#xff0c;表示线程开始执行&#xff1b;当线程执行时&#xff0c;处于RUNNABLE状态&#xff0c;表示线程所需的一切资源都准备好了…

ReviewForJob(3)表、栈和队列

【0】表ADT1&#xff09;intro&#xff1a;我们把 形如 A1, A2, A3, ..., An 的结构称为表&#xff1b;2&#xff09;表的实现&#xff1a; 数组&#xff08;循环数组&#xff09; 或 链表 或 双链表 或 循环链表实现&#xff1b;3&#xff09;表的插入&#xff0c;删除操作可以…

2017一季度JAVA面试题锦集

转载自 2017一季度JAVA面试题锦集 1、如何实现分布式事务&#xff0c;你们公司是怎么解决的&#xff1f; 2、HashMap数据结构及实现原理&#xff0c;其链表是用来解决什么问题的 3、可以自定义java.lang.String类吗&#xff0c;说明为什么 4、redis 1&#xff09;有哪几种类型的…

JDK并发包

JDK提供了大量实用的API和框架&#xff0c;来支持JDK内部功能&#xff1a; 介绍更多多线程控制方法&#xff0c;比如之前的synchronized&#xff1b;介绍JDK中对线程池的支持&#xff0c;提高线程调度性能&#xff1b;向大家介绍JDK的一些并发容器。 1 多线程的团队协作&…

ReviewForJob——希尔排序(缩小增量排序)之塞奇威克增量序列

【0】README 0&#xff09;希尔排序是基于插入排序的。将插入排序算法 内for循环中的所有 1 改为增量就可以。。bingo。。 插入排序源码 1&#xff09;本文旨在给出 希尔排序&#xff08;缩小增量排序&#xff09;之塞奇威克增量序列 的源码实现&#xff1b; 2&#xff09;为…

稍微有点难度的10道java面试题,你会几道?

转载自 稍微有点难度的10道java面试题&#xff0c;你会几道&#xff1f; 1、jvm对频繁调用的方法做了哪些优化&#xff1f; 2、常见的攻击手段有哪些&#xff1f;如何防范&#xff1f; 3、restful api有哪些设计原则&#xff1f; 4、hessian是做什么用的&#xff1f;它的…

重新学习Spring一--Spring在web项目中的启动过程

1 Spring 在web项目中的启动过程 Spring简介 Spring 最简单的功能就是创建对象和管理这些对象间的依赖关系&#xff0c;实现高内聚、低耦合。&#xff08;高内聚&#xff1a;相关性很强的代码组成&#xff0c;既单一责任原则&#xff1b;低耦合&#xff1a;耦合指块间联系&…

ReviewForJob——堆排序

【0】README1&#xff09;本文旨在给出 推排序的源码实现&#xff1b;堆排序是基于二叉树的数组实现的&#xff1b;【1】堆排序步骤step1&#xff09;对排序数据建堆&#xff0c;执行 n 次 insert 操作&#xff08;基于上滤操作&#xff09;&#xff1b;每次 insert 包括 将 新…

重新学习Spring2——IOC和AOP原理彻底搞懂

一、AOP 1 Spring AOP 的实现原理 是对OOP编程方式的一种补充。翻译过来为“面向切面编程”。 1 AspectJ是静态代理的增强&#xff1a;所谓静态代理就是AOP框架会在便一阶段生成AOP代理类&#xff0c;也叫编译器增强。 2 使用Spring AOP 与AspectJ 的静态代理不同&#xff0c…

厉害了,关于String的10道经典面试题

转载自 厉害了&#xff0c;关于String的10道经典面试题 1、String是基本数据类型吗&#xff1f; 2、String是可变的话&#xff1f; 3、怎么比较两个字符串的值一样&#xff0c;怎么比较两个字符串是否同一对象&#xff1f; 4、switch中可以使用String吗&#xff1f; 5、String …

ReviewForJob——快速排序(基于插入排序)+快速选择(快速排序变体)

【0】README 0&#xff09;本文旨在给出 快速排序 的 源码实现和源码分析&#xff08;分析它的坑&#xff09;&#xff1b; 2&#xff09;要知道 在 元素个数小于10的时候&#xff0c;快速排序不如插入排序&#xff1b;注意快速排序选取枢纽元 时 所使用的方法是 三数中值分割…

Spring boot web(2):web综合开发

1 web开发 Spring boot web 开发非常简单&#xff0c;其中包括常用的 json输出、filters、property、log等 1.1 json接口开发 在以前的Spring 开发我么提供json 的做法&#xff1a; 添加jackjson 等相关jar包配置Spring controller扫描对接的方法添加ResponseBody 而在Spri…

10道腾讯的Java面试题

转载自 10道腾讯的Java面试题 下面总结10道面试腾讯的Java面试题。 1、说几种常见的攻击方式及预防手段。 2、http1.x和http2.x的区别。 3、mysql查询语句怎么做性能分析。 4、你知道哪几种排序算法&#xff1f; 5、HashMap和HashTable的区别&#xff0c;并说明其底层实现数据…