Smack:一个开源的XMPP用于即时通讯的客户端类库

 ,  ,  , 

smack

Smack是一个用于和XMPP服务器通信的类库,可以实现即时通讯和聊天。Smack是Spark项目的核心。

示例代码

Smack主要优势

  • 非常简单易用,并且有十分强大的API,只需短短几行代码就可以向用户发送文本消息:
  • 不像其他类库那样强制你进行包级别的编码。Smack提供了智能的、更高级的构造,像Chat和Roster类,可以让你进行更高效的编程;.
  • 你不需要熟悉XMPP XML格式,甚至不需要熟悉XML;
  • 提供了简单的机器到机器通讯,Smack允许在每个消息中设置任意数量的属性,包括java对象;
  • Apache许可下的开源类库,这意味着使用者可以将Smack整合进商业的或者非商业的应用中。

关于XMPP

XMPP (Extensible Messaging and Presence Protocol)是一个由IETF标准化的开放协议,由XMPP标准基金会支持和扩展(http://www.xmpp.org)。

使用前提

Smack的唯一必要条件是JDK 1.2 或更高版本。

需要JAR包

Smack意味着很容易地嵌入到任何现有的Java应用程序中,类库作为Jar文件在应用程序所需的功能上提供更多的灵活性:

  • smack-core.jar — 提供XMPP核心功能,包括XMPP RFC部分所有XMPP的特征。
  • smack-tcp.jar — 支持基于TCP协议的XMPP,包括你通常需要使用的XMPPTCPConnection类。
  • smack-extensions.jar — 支持众多由XMPP标准基金会定义的扩展(XEPs),包括多用户对话、文件传输、用户搜索等等。这些扩展记录在扩展手册
  • smack-experimental.jar — 支持由XMPP标准基金会定义的试验的扩展 (XEPs),这些扩展的API和和功能应被视为是不稳定的。
  • smack-legacy.jar — 支持由XMPP标准基金会定义的遗留的扩展。
  • smack-bosh.jar — 支持BOSH(XEP-0124)。此代码应被视为测试版。
  • smack-jingle.jar — 支持Jingle。此代码是旧的, 现在没有了。
  • smack-resolver-dnsjava.jar — 支持借助于dnsjava解决DNS SRV记录 ,是不支持javax.naming接口的理想平台。
  • smack-resolver-javax.jar — 支持解决 DNS SRV 记录借助于javax namespace API。
  • smack-debug.jar — 一种用于协议通信的增强的GUI调试器,当在类路径中找到并启用调试时它会自动被使用。

配置

Smack有一个包含2个阶段的初始化过程。

  • 初始化系统属性 – 初始化所有通过类SmackConfiguration访问系统属性,这些属性由该类上的getXXX方法检索。
  • 初始化启动类 – 初始化任何类意味着在启动时是活跃的,具体操作如下:首先实例化这个类,如果该类扩展了SmackInitializer,则再调用该类上的初始化函数。如果它没有实现这个接口,那么初始化将会发生在类被加载自动执行静态代码块时。

初始化是通过一个配置文件来完成。默认情况下,Smack会去加载一个Smack jar包下org.jivesoftware.smack/smack- config.xml的文件。这个默认的配置包含一个初始化类的列表去加载。所有需要被初始化的管理型的类都包含在这个初始化列表中。

建立一个连接

XMPPTCPConnection类用于创建到XMPP服务器的连接,下面的代码是创建一个连接的例子:

注意:默认情况下(和可能时)连接到服务器时最大的安全性将被使用,包括使用的TLS加密。ConnectionConfiguration 类在连接创建的时候提供了先进的控制,如禁用和或需要加密的能力。详情请参考XMPPConnection Management

一旦你创建了一个连接,你需要用XMPPConnection.login()这个方法登录。一旦你登录后,就可以被其他用户通过创建新的聊天或群聊的对象聊天。

操作Roster

花名册(roster)让你保持跟踪其它用户的可用性(存在)。用户可以被分成像“朋友”、“同事”这样的组,从而知道其它的用户在线还是离线。

可以使用XMPPConnection.getRoster()方法检索花名册。你可以用花名册(roster)类查找花名册的所有条目,它们所属的组以及每个条目当前呈现的状态。

读写packet

从客户端以XML格式发送到XMPP服务器的每个消息被称为一个数据包(packet),org.jivesoftware.smack.packet包中包含了一些类,这些类封装了XMPP所允许的三个不同的基本包类型(message,presence和IQ)。像Chat和GroupChat这样的类提供了更高类别的构造能够自动地创建和发送数据包,当然你也可以直接创建和发送数据包。 以下代码是一个将你的当前状态改为“隐身“,从而不被别人看到的例子:

Smack提供两种方法读取收到的数据包:PacketListener和PacketCollector。二者都是使用PacketFilter实例来决定哪个数据包应该被处理。数据包监听器(packet listener)用于事件样式的编程,而数据包收集器(packet collector)有一个可以做轮询和阻塞操作的数据包的结果队列。所以,当我们想对一个有可能随时到来的packet采取一些操作时,使用packet监听器;而当我们想等待一个特别的packet到来时,使用packet收集器。数据包包收集器和监听器可以通过XMPPConnection的实例来创建。

开发资源

协议

Smack遵循Apache开源协议发布。

官方网站:http://www.igniterealtime.org/projects/smack/
开源地址:https://github.com/igniterealtime/Smack

1 1 收藏

资源整理者简介:oneDay

简介还没来得及写 :) 个人主页 · 贡献了3个资源 · 1


直接登录

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1439 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer