XMPP客户端库Smack 4.0.6版开发

简介: XMPP客户端库Smack 4.0.6版开发 一、Smack库概述 Smack是一个开源、易用的XMPP/Jabber客户端库,它使用Java语言开发,由Jive Software开发。
XMPP客户端库Smack 4.0.6版开发
一、Smack库概述
Smack是一个开源、易用的XMPP/Jabber客户端库,它使用Java语言开发,由Jive Software开发。
Smack的优点是编程简单。
Smack的缺点是其API并非为大量并发用户设计,每个客户都要1个线程,占用资源相对较,因此用Smack做模拟测试时,1台机器只能模拟有限(数千个)客户。
截止2014年11月27日,Smack库已经发展到4.0.6版。
最新的好消息是Smack在4.1.0版后将直接支持Android系统,而无需再使用以前的Smack移植版aSmack库了。
Smack库源码托管于GitHub,主页见: https://github.com/igniterealtime/Smack/

二、Smack 4的改变
Smack库从3.4版发展到4.0.x版后,其API有较大的变化,主要有:
1、把Connection类重命名为XMPPConnection类
XMPPConnection类是XMPPTCPConnection类和XMPPBOSHConnection类的父类。
2、把各种Provider类进行了分包
3、keep-alive(持久连接)机制从smack-core库移到了smack-extensions库
keep-alive机制现在由PingManager类提供。
4、PrivacyList类的toString()方法重命名为getName()
5、当Chat实例的所有引用都撤掉后,应该调用Chat.close()方法
否则Chat对象会有内存泄露的隐患,直到ChatManager对象被垃圾回收器回收后内存泄露隐患才会消失。
6、ServerTrustManager类被移除了
如果要使用带SSL认证的XMPP,你只需提供自己的SSLContext对象给ConnectionConfiguration对象即可。
7、Packet.setProperty()从smack-core库移到了smack-extensions库
其API现在可以在org.jivesoftware.smackx.jiveproperties包中找到。
8、Connection.getAccountManager()方法现在改成了AccountManager.getInstance(XMPPConnection)方法
9、异常API做了改进
10、ToContains过滤器被移除了

三、Smack库的特征
1、极度简单易用,API功能强大
发送一条文本消息给某个用户只需几行代码:

点击(此处)折叠或打开

  1. AbstractXMPPConnection connection = new XMPPTCPConnection("mtucker", "password", "jabber.org");
  2. connection.connect();
  3. connection.login();
  4. Chat chat = ChatManager.getInstanceFor(connection)
  5. .createChat("jsmith@jivesoftware.com", new MessageListener(){
  6. public void processMessage(Chat chat, Message message){
  7. System.out.println("Received message: " + message);
  8. }
  9. });
  10. chat.sendMessage("Howdy!");
2、隔离了底层数据包组装的复杂性,自然有相应的库来完成这些功能。Smack提供了更智能的高层构造,比如Chat类和Roster类,这样开发会更富有效率。
1)无需熟悉XMPP的XML格式,甚至都不需要了解XML
2)提供了简单的M2M通信
Smack让开发者可以对每条消息都设置大量的属性,属性中还可以包含Java对象。
3)基于Apache许可证的开源代码,这意味着你可以把Smack放入你自己的商业软件中。

四、Smack库的组成
Smack库可以内嵌到任意的Java应用程序中。Smack库有数个JAR文件组成,非常具有灵活性。
1、smack-core.jar
提供了核心XMPP功能。都是XMPP RFC规范定义的XMPP特性。
2、smack-extensions.jar
支持许多由XMPP Standards Foundation定义的扩展(XEP)功能。包括群聊、文件传输、用户搜索等等。
以后可查看文档《扩展手册》:
https://github.com/igniterealtime/Smack/blob/master/documentation/extensions/index.html
(目前还是无效的)
3、smack-experimental.jar
支持许多由XMPP Standards Foundation定义的体验性(XEP)功能。其API和功能特性都被认为是不稳定的。
4、smack-legacy.jar
支持许多由XMPP Standards Foundation定义的遗留(XEP)功能。
5、smack-bosh.jar
支持BOSH通信(XEP-0124规范定义的)。此代码被认为处于Beta阶段。
6、smack-jingle.jar
支持Jingle。此代码很老,目前处于无维护的状态。
7、smack-resolver-dnsjava.jar
支持对DNS SRV记录的解析,主要用于那些不支持javax.naming API的平台。
8、smack-debug.jar
用于协议流量的增强型GUI调试器。当调试模式开启后,如果它在类路径下,它会自动被使用。
以后可查看文档《调试模式》:
https://github.com/igniterealtime/Smack/blob/master/documentation/debugging.html
(目前还是无效的)

五、Smack的配置
Smack的初始化过程涉及到2阶段的调用。
1、初始化系统属性
通过SmackConfiguration类初始化所有的系统可访问属性,这些属性都是通过getXXX方法取回属性值的。
2、初始化启动类
任意类如果继承了SmackInitializer接口后,都可以在调用initialize()方法后得到初始化,这意味着得到初始化的类在启动后都是活动的。
如果没有继承SmackInitializer接口,那么要实现初始化,必须要放置一个静态代码块来实现——他在类装载时会自动执行。

初始化是通过配置文件来完成的。默认情况下,Smack会载入Smack JAR文件中内嵌的配置文件(它位于org.jivesoftware.smack/smack-config.xml)。这个指定的配置文件包含了一系列需载入初始化的类列表。所有的管理器类型的类都需要被初始化,这些管理器类就包含在上面所说的初始化列表中。

目录
相关文章
|
存储 数据管理 虚拟化
云计算——存储虚拟化简介 与 存储模式及方法
云计算——存储虚拟化简介 与 存储模式及方法
720 0
|
Java Maven Docker
Idea远程连接Harbor及Maven自动上传镜像
Idea远程连接docker环境+Maven链接harbor仓库自动上传镜像
1486 0
Idea远程连接Harbor及Maven自动上传镜像
|
4月前
|
存储 前端开发 搜索推荐
typora最新版解决方法,typora免费下载
Typora是一款简洁高效的Markdown编辑器,支持实时预览、语法高亮、数学公式、图表绘制等功能,适用于写作、编程和技术文档编写。界面极简,功能全面,支持多平台使用。
790 1
|
7月前
|
监控 供应链 物联网
中小企业数字化转型路径第三步:通过软件连接实现数据流动
本文聚焦中小企业数字化转型中的数据流动问题,提出通过技术中台和数据中台打通数据孤岛的解决方案。文章阐述了数据流动的三大核心内涵:技术架构连接异构系统、数据治理整合多源信息、价值闭环实现智能决策,并总结了效率提升、成本优化、决策精准化和生态协同四大转型价值。同时,提供了四步落地路径,包括需求诊断、工具选型、全业务连接及持续优化,助力企业实现从“单点改造”到“全链条协同”的关键跃迁。附带案例与工具推荐,实用性强。
192 1
中小企业数字化转型路径第三步:通过软件连接实现数据流动
|
7月前
|
SQL 存储 关系型数据库
MySQL选错索引了怎么办?
本文探讨了MySQL中因索引选择不当导致查询性能下降的问题。通过创建包含10万行数据的表并插入数据,分析了一条简单SQL语句在不同场景下的执行情况。实验表明,当数据频繁更新时,MySQL可能因统计信息不准确而选错索引,导致全表扫描。文章深入解析了优化器判断扫描行数的机制,指出基数统计误差是主要原因,并提供了通过`analyze table`重新统计索引信息的解决方法。
199 3
|
缓存 Linux 编译器
【C++】CentOS环境搭建-安装log4cplus日志组件包及报错解决方案
通过上述步骤,您应该能够在CentOS环境中成功安装并使用log4cplus日志组件。面对任何安装或使用过程中出现的问题,仔细检查错误信息,对照提供的解决方案进行调整,通常都能找到合适的解决之道。log4cplus的强大功能将为您的项目提供灵活、高效的日志管理方案,助力软件开发与维护。
444 0
|
自然语言处理 算法 数据挖掘
模块化RAG技术路线图:从基础Naive RAG 到Modular RAG全方位技术解读
【8月更文挑战第12天】模块化RAG技术路线图:从基础Naive RAG 到Modular RAG全方位技术解读
3190 9
模块化RAG技术路线图:从基础Naive RAG 到Modular RAG全方位技术解读
|
人工智能 算法 前端开发
在淘宝,营销技术团队如何支持双11?
在淘宝,营销技术团队如何支持双11?
420 0
|
存储 安全 Linux
Linux sync 指令的作用
Linux sync 命令的作用是确保所有未写入磁盘的数据被立即同步至物理存储介质上,以保护文件系统的一致性和防止意外关机时的数据丢失。虽然 sync 在日常交互式使用中可能不常直接调用,但许多高级操作或脚本中会包含此命令来保证数据安全。
602 0
|
Kubernetes Cloud Native Nacos
Nacos架构与原理 -服务网格生态
Nacos架构与原理 -服务网格生态
418 0