当前位置:网站首页 > Java教程 > 正文

java xmpp教程



XMPP 是一种丰富而复杂的即时消息协议。

在本教程中,我们将介绍 Smack,这是一个用 Java 编写的模块化和可移植的开源 XMPP 客户端,它为我们完成了大部分繁重的工作。

Smack 被组织为几个模块以提供更大的灵活性,因此我们可以轻松包含所需的功能。

其中一些包括:

  • 基于 TCP 的 XMPP 模块
  • 支持 XMPP 标准基金会定义的许多扩展的模块
  • 旧版扩展支持
  • 要调试的模块

我们可以在 XMPP 的文档中找到所有支持的模块。

但是,在本教程中,我们将只使用 tcpimextensionsjava7 模块:

最新版本可以在Maven Central找到。

为了测试客户端,我们需要一个 XMPP 服务器。为此,我们将在 jabber.hot-chilli.net 上创建一个帐户,这是一个免费的Jabber / XMPP服务。

之后,我们可以使用 XMPPTCPConnectionConfiguration 类配置 Smack,该类提供了一个构建器来设置连接的参数:

构建器允许我们设置执行连接所需的基本信息。如果需要,我们还可以设置其他参数,例如端口、SSL 协议和超时。

建立连接只需使用 XMPPTCPConnection 类即可实现:

该类包含一个构造函数,该构造函数接受以前生成的配置。它还提供了连接到服务器和登录的方法。

建立连接后,我们可以使用Smack的功能,例如聊天,我们将在下一节中介绍。

如果连接突然中断,默认情况下,Smack 将尝试重新连接。

重新连接管理器将尝试立即重新连接到服务器,并增加尝试之间的延迟,因为连续的重新连接不断失败。

该库的主要功能之一是–聊天支持。

使用 Chat 类可以在两个用户之间创建新的消息线程:

请注意,为了构建聊天,我们使用了ChatManager,并且显然指定了与谁聊天。我们通过使用 EntityBareJid 对象实现了后者,该对象包装了一个由本地部分 (baeldung2) 和域部分 (jabb3r.org) 组成的 XMPP 地址(又名 JID)。

之后,我们可以使用 send() 方法发送消息:

并通过设置侦听器接收消息:

除了端到端的用户聊天外,Smack 还通过使用房间为群聊提供支持。

有两种类型的房间,即时房间和预订房间。

即时会议室可立即访问,并根据某些默认配置自动创建。另一方面,在允许任何人进入之前,房间所有者会手动配置预订的房间。

让我们来看看如何使用多用户聊天管理器创建即时房间:

以类似的方式,我们可以创建一个预留房间:

Smack提供的另一个功能是可以跟踪其他用户的存在。

使用 Roster.getInstanceFor(),我们可以获取一个 Roster 实例:

花名册是一个联系人列表,它将用户表示为名册条目对象,并允许我们将用户组织成组。

我们可以使用 getEntries() 方法打印花名册中的所有条目:

此外,它允许我们使用 RosterListener 侦听其条目和状态数据的变化:

它还提供了一种保护用户隐私的方法,方法是确保只有经过批准的用户才能订阅名单。为此,Smack 实现了基于权限的模型。

有三种方法可以使用 Roster.setSubscriptionMode() 方法处理状态订阅请求:

  • Roster.SubscriptionMode.accept_all – 接受所有订阅请求
  • Roster.SubscriptionMode.reject_all—— 拒绝所有订阅请求
  • Roster.SubscriptionMode.manual 手动处理状态订阅请求

如果我们选择手动处理订阅请求,则需要注册一个 StanzaListener(在下一节中描述)并使用 Presence.Type.subscription 类型处理数据包。

除了聊天之外,Smack 还提供了一个灵活的框架来发送并侦听传入的。

澄清一下,节是 XMPP 中离散的语义意义单位。它是通过 XML 流从一个实体发送到另一个实体的结构化信息。

我们可以使用 send() 方法通过连接传输Stanza:

在上面的示例中,我们发送了一个状态Stanza来订阅名单。

另一方面,为了处理传入的节,库提供了两个构造:

  • StanzaCollector
  • StanzaListener

特别是,StanzaCollector 让我们同步等待新的Stanza

虽然 StanzaListener 是一个接口,用于异步通知我们传入的Stanza

此外,该库提供了一组内置的过滤器来处理传入的Stanza

我们可以使用 StanzaTypeFilter 按类型过滤Stanza,也可以使用 StanzaIdFilter 按 ID 过滤Stanza

或者,通过特定地址辨别:

我们可以使用逻辑过滤器运算符(AndFilterOrFilterNotFilter)来创建复杂的过滤器:

在本文中,我们介绍了Smack提供的现成最有用的类。

我们学习了如何配置库以发送和接收 XMPP 的Stanza

  • 上一篇: java320教程免费
  • 下一篇: java280教程
  • 版权声明


    相关文章:

  • java320教程免费2024-11-27 08:02:04
  • 菜鸟教程java并发2024-11-27 08:02:04
  • java 服务器教程2024-11-27 08:02:04
  • java框架实战教程2024-11-27 08:02:04
  • idea java教程2024-11-27 08:02:04
  • java280教程2024-11-27 08:02:04
  • java教程882024-11-27 08:02:04
  • java数据转行教程2024-11-27 08:02:04
  • java源码编写教程2024-11-27 08:02:04
  • java基础复习教程2024-11-27 08:02:04