63

Java で単純な XMPP サーバーを実装したいと考えていました。

私が必要としているのは、クライアントからの xmpp リクエストを解析して理解できるライブラリです。私は Smack (後述) と JSO を見てきました。Smack はクライアントのみのように見えるため、パケットの解析には役立つかもしれませんが、クライアントへの応答方法はわかりません。JSO は維持されていますか? 非常に古いように見えます。唯一の有望な手段は、完全な商用 (OSS) XMPP サーバーである Openfire を分離することです。

Netty または Mina の上に数行のコードを追加することを期待していたので、ネットワークから離れたメッセージの処理を開始できました。


ジョー -

私がやろうとしていることへの答えはやや長いです - 私はそれを短くしようとします.

大まかに関連しているだけの 2 つのことがあります。

1) XMPP サーバーを作成したかったのは、2 つのクライアントが通信するためのカスタム プロトコルを作成することを想像したからです。基本的には、ネットワーク化された iPhone アプリを考えていますが、低レベルのバイナリ プロトコルに依存したくありませんでした。これは、XMPP のようなものを使用すると、アプリがローカルの Wi-Fi ベースのアプリからインターネット ベースのアプリに急速に「成長」できることを意味するためです。 ...

交換されるメッセージは比較的低レイテンシである必要があるため、厳密に言えばバイナリ プロトコルが最適ですが、XMPP を使用して拡張性のメリットを享受できるほどのオーバーヘッドが発生しない場合は、検討する価値があると感じました。そして柔軟性。

2) 私は Terracotta で働いているので、すべてをクラスター化することに夢中になっています。カスタム サーバー コードを作成することを考え始めるとすぐに、それをクラスター化する必要があると考えました。Terracotta は Java POJO のスケールアウトを簡単にするので、Terracotta のデモンストレーション アプリとして超シンプルな XMPP サーバーを構築することを考えました。基本的に、各ユーザーは TCP 接続を介してサーバーに接続し、ユーザーをハッシュマップに登録します。各ユーザーには、キューからメッセージを取得するリスナー スレッドを含む LinkedBlockingQueue があります。次に、他のユーザー (古いチャット アプリケーションなど) にメッセージを送信したい接続ユーザーは、接続を介してそのユーザーに XMPP メッセージを (通常どおり) 発行するだけです。サーバーはそれを取得し、マップ内の対応するユーザー オブジェクトを検索して、メッセージをキューに配置します。キューがクラスター化されているため、

ですから、残念ながら要約が短すぎません。しかし、それが私がやりたいことです。#1 を達成するために Openfire 用のプラグインを作成することもできると思いますが、多くの配管を処理する必要があるため、#2 を行うのは難しいと思います (特に、シンプルな 10 ~ 20kb の Maven プロジェクト)。

4

10 に答える 10

51

http://xmpp.org/xmpp-software/libraries/には、XMPP のソフトウェア ライブラリのリストがあります。これは古いスナップショットです。

ActionScript

C

C++

C# / .NET / モノラル

アーラン

閃光

ハスケル

ジャワ

JavaScript

舌足らずの発音

Objective-C

パール

PHP

パイソン

ルビー

Tcl

于 2008-10-07T08:23:40.900 に答える
9

私も同じ検索をしました。私は最初に Smack を試してみましたが、それが c2s (クライアントからサーバーへ) を対象としていて、必要なものがないことに気付きました。私は Tinder を見ましたが、ライセンス モデルが好きではありませんでした (見たところ、もっと生々しかったです)。ついに Whack を見て、これこそが私が必要としていたものであることに気付きましたが、多くのものが欠けていました (Tinder が生まれたのはそのためだと思います)。

だから..私の解決策は?フォークされた Whack は、いくつかのコードを追加して物事を抽象化し、使いやすくしようとしました: http://github.com/Communitivity/Adirondack

それに基づいてScala ライブラリを作成し、外部コンポーネント ベースのエージェントを作成できるようにしまし

私の主な目標の 1 つは、コンポーネントをすばやく簡単に作成できるようにすることでした。このようなコンポーネントの例を以下に示します。

object Main {

/**
* @param args the command line arguments
*/
  def main(args: Array[String]) :Unit = {
      new XMPPComponent(
        new ComponentConfig() {
            def secret() : String = { "secret.goes.here" }
            def server() : String = { "communitivity.com" }
            def subdomain() : String = { "weather" }
            def name() : String = { "US Weather" }
            def description() : String = { "Weather component that also supported SPARQL/XMPP" }
        },
       actor {
        loop {
            react {
                case (pkt:Packet, out : Actor) =>
                    Console.println("Received packet...\n"+pkt.toXML)
                    pkt match {
                        case message:Message =>
                            val reply = new Message()
                            reply.setTo(message.getFrom())
                            reply.setFrom(message.getTo())
                            reply.setType(message.getType())
                            reply.setThread(message.getThread())
                            reply.setBody("Received '"+message.getBody()+"', tyvm")
                            out ! reply
                        case _ =>
                            Console.println("Received something other than Message")
                    }
                 case _ =>
                    Console.println("Received something other than (Packet, actor)")
            }
        }
       }
    ).start
  }
}
于 2010-03-11T17:52:17.913 に答える
4

Ignite Realtimeは、サーバー側のコンポーネントや他のサーバーを作成するためだけに OpenFire から抽出された基本的なビルディング ブロックであるTinder APIを共有しています。基本的な XMPP ビルディング ブロックを実装しており、そこから自由に開始できます。

于 2009-07-16T13:05:20.763 に答える
3

また、Ignite Realtime には、XMPP コンポーネントの構築専用のWhack APIがあります。

Whack は、XMPP コンポーネント用のオープン ソース XMPP (Jabber) コンポーネント ライブラリです。完全な XMPP コンポーネントから、インターセプトの送信や特定のメッセージの処理などの単純な XMPP 統合まで、アプリケーションに組み込むことができる純粋な Java ライブラリです。

于 2009-11-18T05:59:25.430 に答える
2

最善の策は、既存のサーバーを使用して、それに機能を追加することです。ライブラリを使用しても、サーバー全体をゼロから作成するのは、予想よりもはるかに困難です。

解決しようとしている問題について詳しく教えてください。その後、適切なサーバーを紹介し、プラグインする適切な場所をお手伝いします.

于 2008-10-07T23:01:52.140 に答える
1

あなたはすでに適切なソリューションを見たと思います: Openfire

これは商用ソリューションではありません。Mina と Jetty の上にある XMPP サーバーで、Apache ライセンスの下でリリースされた Java で書かれています。求めていたものにかなり近づきます。あなたがライブラリを求めたことは知っていますが、openfire のように簡単に拡張できる安定した開発済みのオープン ソース ソフトウェアを使用してみませんか?

于 2012-04-28T09:46:42.640 に答える
1

これをチェックしてください:

これは低レベルのライブラリです。それはインキュベーション状態にあり、誰もそれを推進していないようです。しかし、それは素晴らしいAPIであり、進歩することを願っています.

http://java.net/project/jso-jabber-stream-objects

于 2010-04-29T07:16:00.010 に答える
0

Javaベースの優れたxmppサーバーを見つけました:http ://www.tigase.org/

于 2012-11-29T15:37:07.990 に答える
0

Vorpalをご覧ください。XEP-0114 プロトコルを実装する Java EE 6 フレームワークです。

于 2013-04-07T10:19:33.960 に答える
0

OPで小さなハックを構築することが意図されていることを私は知っています。ただし、スケーリングやエンドツーエンドのセキュリティなどに関心がある場合は、Coversant の Soapbox を検討することをお勧めします。彼らは私たちのパートナーです。ハード リアルタイム仮想マシン環境である JamaicaVM で SMACK を使用して Soapbox と通信します。

また、目的がサーバー アプリと通信することであり、XMPP サーバー (Soapbox など) を再実装することではない場合、SMACK クライアントをそのために使用できます。これは XMPP サーバーへのクライアントですが、実際の通信のインスタンスは、XMPP サーバーを介したクライアントからクライアントへの通信である可能性があります。

于 2013-11-12T16:22:17.357 に答える