专栏首页向治洪XMPP客户端库Smack 4.0.6版开发之二

XMPP客户端库Smack 4.0.6版开发之二

XMPP客户端库Smack 4.0.6版开发之二

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

AbstractXMPPConnection connection = new XMPPTCPConnection("mtucker", "password", "jabber.org");
connection.connect();
connection.login();
Chat chat = ChatManager.getInstanceFor(connection)
		.createChat("jsmith@jivesoftware.com", new MessageListener(){
	public void processMessage(Chat chat, Message message){
		System.out.println("Received message: " + message);
	}
});
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)。这个指定的配置文件包含了一系列需载入初始化的类列表。所有的管理器类型的类都需要被初始化,这些管理器类就包含在上面所说的初始化列表中。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 解决Eclipse报errors running builder ‘javascript validator’ on project

    今天导入jquery的js到项目中,Eclipse老是动不动就报错: errors running builder ‘javascript validator’...

    xiangzhihong
  • cocos2d 在windows环境下搭建

    详细搭建步骤如下: 1、Android 开发环境搭建 Android开发环境搭建不是重点,相信看此文章的很多人都已经搭建成功,这里随便概述性的说说。 1、下载 ...

    xiangzhihong
  • android 实现淘宝收益图的折线

    实现的效果我一会贴上,我先说下原理,我们知道要实现在canvas上画线,不就是要搞一个paint嘛,然后首先肯定要设置下paint的属性,那么画文字呢,不就是T...

    xiangzhihong
  • loadrunner11中java vuser引用jar包

    3、将新生成的jar包HelloWorld.jar放到一个指定的目录下,如D:\LoadRunner\jar。

    流柯
  • 现代C++之SFINAE应用(小工具编写)

    是不是有点像Python的print一样简单,但这背后实现也就仅仅不到100行的代码,本节来实现这种功能。

    公众号guangcity
  • 联发科发布全球首款双5G芯片—Dimensity 1000,带有集成5G调制解调器

    首先,芯片组的命名是该公司未来SoC系列重新命名的一部分。“ Dimensity”名称意在迎接新一代,并将新的5G SoC与之前的4G Helio产品系列区分开...

    AiTechYun
  • 为何Keras中的CNN是有问题的,如何修复它们?

    上个星期我做了一些实验,用了在 CIFAR10 数据集上训练的 VGG16。我需要从零开始训练模型,所以没有使用在 ImageNet 上预训练的版本。

    机器之心
  • 浅谈:在2020年,该如何选择合适的小程序框架?

    微信并不是第一个做小程序的 App,而是做小程序最有优势的 App,比如高流量、用户较长的停留时间等等。站在微信的视角,小程序从业务形式上更像是公众号开发的演变...

    极乐君
  • 一文读懂神经网络初始化!吴恩达Deeplearning.ai最新干货

    初始化会对深度神经网络模型的训练时间和收敛性产生重大影响。简单的初始化方法可以加速训练,但使用这些方法需要注意小心常见的陷阱。本文将解释如何有效地对神经网络参数...

    数据派THU
  • 谈谈 c# 对象初始化问题 C#对象初始化

    之前在学习过程中只是知道该如何初始化对象,但是却不明白为何要这么做,不这么做有什么问题。

    用户7053485

扫码关注云+社区

领取腾讯云代金券