単純なサーバーとクライアントをセットアップしましたが、xmppサーバーからクライアントにメッセージを送信する方法がありません。助けてください。可能であれば、いくつかのリンクを提案してください。
1 に答える
これは、Vysper に関して驚くほど頻繁に出てくる質問です。質問をする理由はいくつかありますが、特に理由の 1 つは、HTTP Web サーバーが実際には、コンテンツ (HTML、CSS など) を作成し、エージェント (別名 Web ブラウザー) に送信するように機能することです。
メールやチャットなどのメッセージベースのプロトコルでは、これは少し異なります。
電子メールは、エージェント (電子メール クライアント) によって作成および消費されます。サーバーはほとんどの場合、認証、フィルタリング、保存などの側面を含むメッセージ ブローカー (http://en.wikipedia.org/wiki/Message_broker) としてのみ機能します。サーバーが独自の電子メール メッセージを生成することはめったにありません。多くの場合、少数の中央アカウント (order@acme.com、support@acme.com など) がほとんどの電子メールを作成します。つまり、実際のメッセージは電子メール クライアントによって作成され、クライアントに代わってサーバーによって配信されます。(さらに、電子メール/SMTP には、クライアントが電子メールを受信者の電子メール サーバーに直接送信するという特殊性があります。これは、/spam/ という悪夢のようなものです。)
一般に、ここでは XMPP に違いはありません。XMPP チャット クライアントは、接続してメッセージを送受信します。XMPP サーバーはメッセージを仲介します。したがって、あなたの質問に答えるには、ほとんどの場合、他のすべてのアカウントと通信する中央アカウントを持つことで十分であり、推奨されます。これが最もシンプルで最適なソリューションです。
ただし、XMPP はチャット以上のものを提供します。フォーム、パブリッシュ/サブスクライブ、および管理/コマンドに基づくウィザードのようなワークフローの拡張機能があります。
本当に必要な場合は、独自の拡張機能を追加できます。
たとえば、ここで VCard 拡張機能を見てください: http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/拡張子/xep0054_vcardtemp/
まず、org.apache.vysper.xmpp.modules.core.base.handler.DefaultIQHandler をサブクラス化することをお勧めします。これは、DefaultServlet をサブクラス化して独自のサーブレットを実装するようなものです。これには、提供する XMPP スタンザ ロジックが含まれています。
さらに、ハンドラーをサーバーにプラグインする必要があります。これは、VcardTempModule の例に従って行うのが最適です。
- Handler インスタンスを提供して登録する
- 永続性 (または必要なその他のバックエンド接続) を初期化します
- 拡張機能の名前空間を認識させ、Service Discovery で IQ を発表します
永続性が必要な場合は、VcardTempPersistenceManager を参照してください。
やらなければならないことは、モジュールをサーバーに認識させることです。Spring を使用する場合は、Spring 構成に 1 行追加します。組み込みのアプローチを使用する場合は、server.addModule(new VcardTempModule()); と同等のものを呼び出す必要があります。org.apache.vysper.xmpp.server.ServerMain で行われているように
ここで、サーバーを通過する他のスタンザへの反応ではない新しいスタンザ (メッセージ) を発行したい場合は、スタンザを作成して送信できる独自のスレッドから開始する必要もあります。
ただし、繰り返しになりますが、推奨される方法は、クライアントにすべてのメッセージを作成させることです。