18.4.4.2. コールバックのリモート処理について
リモーティングクライアントがサーバーに情報を要求すると、サーバーがブロックして応答するのを待つことができますが、これは多くの場合、理想的な動作ではありません。クライアントがサーバー上の非同期イベントをリッスンし、サーバーが要求を終了するのを待っている間、他の作業を続行できるようにするために、アプリケーションは、サーバーが終了したときに通知を送信するようにサーバーに要求できます。これはコールバックと呼ばれます。あるクライアントは、別のクライアントに代わって生成された非同期イベントのリスナーとして自分自身を追加することもできます。コールバックの受信方法には、プルコールバックまたはプッシュコールバックの 2 つの異なる選択肢があります。クライアントはプルコールバックを同期的にチェックしますが、プッシュコールバックを受動的にリッスンします。
本質的に、コールバックはサーバーが送信することによって機能します
InvocationRequest
クライアントに。サーバー側のコードは、コールバックが同期であるか非同期であるかに関係なく、同じように機能します。クライアントだけが違いを知る必要があります。サーバーの InvocationRequest はresponseObject
クライアントに。これは、クライアントが要求したペイロードです。これは、リクエストまたはイベント通知への直接の応答である可能性があります。
サーバーは、
m_listeners
物体。サーバーハンドラーに追加されたすべてのリスナーのリストが含まれています。TheServerInvocationHandler
インターフェイスには、このリストを管理できるメソッドが含まれています。
クライアントは、プルコールバックとプッシュコールバックをさまざまな方法で処理します。いずれの場合も、コールバックハンドラーを実装する必要があります。コールバックハンドラーはインターフェイスの実装です
org.jboss.remoting.InvokerCallbackHandler
、コールバックデータを処理します。コールバックハンドラーを実装した後、プルコールバックのリスナーとして自分自身を追加するか、プッシュコールバックのコールバックサーバーを実装します。
コールバックをプル
プルコールバックの場合、クライアントは、を使用してサーバーのリスナーのリストに自分自身を追加します。Client.addListener()
方法。次に、コールバックデータの同期配信のためにサーバーを定期的にポーリングします。このポーリングは、Client.getCallbacks()
。
プッシュコールバック
プッシュコールバックでは、クライアントアプリケーションが独自の InvocationHandler を実行する必要があります。これを行うには、クライアント自体で Remoting サービスを実行する必要があります。これは、コールバックサーバー と呼ばれます。コールバックサーバーは着信要求を非同期で受け入れ、要求者 (この場合はサーバー) のためにそれらを処理します。クライアントのコールバックサーバーをメインサーバーに登録するには、コールバックサーバーのInvokerLocator
の 2 番目の引数としてaddListener
方法。