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 プロジェクト)。