java - 用于服务器端的好的 XMPP Java 库?

标签 java xmpp

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

8 年前关闭。




Improve this question




我希望用 Java 实现一个简单的 XMPP 服务器。

我需要的是一个可以解析和理解来自客户端的 xmpp 请求的库。我看过 Smack(下面提到的)和 JSO。 Smack 似乎只是客户端,因此虽然它可能有助于解析数据包,但它不知道如何响应客户端。 JSO 是否维护它看起来很旧。唯一有希望的途径是拆分 Openfire,它是一个完整的商业 (OSS) XMPP 服务器。

我只是希望在 Netty 或 Mina 之上有几行代码,这样我就可以开始处理一些离线消息。

乔——

嗯,我正在尝试做的事情的答案有点长 - 我会尽量保持简短。

有两件事只是松散相关的:

1) 我想编写一个 XMPP 服务器,因为我想为两个客户端编写一个自定义协议(protocol)来进行通信。基本上我正在考虑一个联网的 iPhone 应用程序 - 但我不想依赖低级二进制协议(protocol),因为使用像 XMPP 这样的东西意味着该应用程序可以非常快速地从基于 wifi 的本地应用程序“成长”为基于互联网的应用程序...

交换的消息应该是相对较低的延迟,所以严格来说二进制协议(protocol)最好,但我觉得如果 XMPP 不引入太多开销,我可以使用它,然后从它的可扩展性中获益,这可能值得探索和稍后的灵 active 。

2) 我为 Terracotta 工作 - 所以我疯狂地想把所有东西都聚集在一起。当我开始考虑编写一些自定义服务器代码时,我想我想对它进行集群。 Terracotta 使 Java POJO 的扩展变得微不足道,所以我的想法是构建一个 super 简单的 XMPP 服务器作为 Terracotta 的演示应用程序。基本上,每个用户都会通过 TCP 连接连接到服务器,这会将用户注册到哈希映射中。每个用户都有一个 LinkedBlockingQueue,其中有一个监听器线程从队列中获取消息。然后,任何想要向任何其他用户(例如,任何旧的聊天应用程序)发送消息的已连接用户只需通过连接向该用户发出 XMPP 消息(像往常一样)。服务器拿起它,在 map 中查找相应的用户对象并将消息放入队列中。由于队列是集群的,无论目标用户是连接到同一个物理服务器还是不同的物理服务器,都会传递消息,并且正在监听的线程将其捡起并将其发送回目标用户的 tcp 连接。

所以 - 恐怕没有太短的总结。但这就是我想做的。我想我可以为 Openfire 编写一个插件来完成 #1,但我认为它需要处理很多管道,所以它更难做 #2(特别是因为我希望有非常少量的代码可以放入一个简单的 10-20kb Maven 项目)。

最佳答案

http://xmpp.org/xmpp-software/libraries/有一个 XMPP 软件库列表。这是它的过时快照:

ActionScript

  • as3xmpp

  • C

  • iksemel
  • libstrophe
  • Loudmouth

  • C++

  • gloox
  • Iris
  • oajabber

  • C#/.NET/单声道

  • agsXMPP SDK
  • jabber-net

  • 二郎

  • Jabberlang

  • 闪光

  • XIFF

  • haskell

  • hsxmpp

  • java

  • Echomine Feridian
  • Jabber Stream Objects (JSO)
  • Smack

  • JavaScript

  • strophe.js
  • xmpp4js

  • Lisp

  • cl-xmpp

  • 目标-C

  • xmppframework

  • 珀尔

  • AnyEvent::XMPP

  • PHP

  • Lightr
  • xmpphp

  • Python

  • jabber.py
  • pyxmpp
  • SleekXMPP
  • Twisted Words
  • xmpp-psn
  • xmpppy

  • ruby

  • XMPP4R

  • TCL

  • JabberLib
  • 关于java - 用于服务器端的好的 XMPP Java 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/177514/

    相关文章:

    java - 如何检测 Apache Camel 中断开/恢复的 JMS 连接?

    java - 通过Android连接Openfire服务器

    java - 多个用户同时访问的 Web 应用程序的 ExecutorService 线程池大小

    java - 使用 itext java 使用自定义字体编写特殊字符

    Java Swing : unable to load image using getResource

    java - 向上转换实际上如何在 Java 中工作

    java - 我如何从客户端知道 XMPP 服务器中是否存在帐户?

    Android Smack 在加入 MultiUserChat 时给出超时异常

    android - java.lang.NoClassDefFoundError : org. jivesoftware.smack.XMPPConnection

    android 无法在 asmack 中添加好友