1

次の問題の解決策を見つけようとしています: 現在、jax-ws で動作する同期 Web サービスがあります。

私がする必要があるのは、クライアント要求が同期したままになるように何らかの方法を見つけることです。つまり、要求を送信すると、クライアントは応答を返すまでブロックされますが、サーバー側は非同期になります。

また、システムは多くのリクエストを受け取り、各リクエストには最悪の場合 (数秒) 時間がかかる可能性があるため、できるだけ少ないリソースを使用するソリューションも必要です。

サーブレット 3.0 がこのすべての要件に対応していることは知っていますが、Web サービスでは使用できないことは理解していましたが、本当ですか?

また、クライアント要求を受信するキューと、クライアントが応答を取得する別のキューを定義できる jms 上の webservice と呼ばれるものがあることも確認しましたが、それがどのように機能するかの例は見ませんでしたクライアントが実際に同期して動作している場合。

あなたはなにか考えはありますか?

よろしくお願いします、 オレル

4

1 に答える 1

0

チケット/ハンドル/トークンを返すように Web サービスを設計できます。

Handle submitRequest(Request request)

したがって、この関数はリクエストを受け入れるだけで、すぐに戻ります。

後でクライアントで結果をポーリングできるため、別の関数が必要です。

Result poll(Handle handle)

リクエスト処理が完了している場合、結果は null 以外です。

クライアントでは、ポーリング関数の呼び出しの間にスリープ (またはプログレス バーを更新) できます。

どちらの機能も、サーバー側でほとんどリソースを必要としません。開いている HTTP 接続は必要ありません。これらは、JMS ベースの非同期処理エンジンのフロントエンドとして機能します。

一方、ビジネス要件に応じて、ポーリング頻度またはスリープ期間をそれぞれ調整する必要があります (例: 100 ミリ秒、250 ミリ秒、500 ミリ秒、1 秒、2 秒、3 秒)。

アップデート:

クライアントを変更できない場合、サーバーはクライアントに代わってサービス側で非同期の結果をポーリングできます。ただし、この方法では接続が開いたままになるため、タイムアウトに注意する必要があります。

于 2013-06-13T08:33:37.513 に答える