7

ApacheCXFWebサービススタックを使用しています。操作が完了する前にクライアントがタイムアウトしたりサーバーから切断したりすると、サーバーは操作が完了するまで操作を実行し続けます。クライアントが切断したことをサーバーに検出させ、それに応じて処理させたいと思います。

クライアントがApacheCXFを使用して切断したことを検出する方法はありますか?他のJavaWebサービススタックを使用するのはどうですか?

4

1 に答える 1

2

私はApacheCXFに精通していませんが、以下はJavaサーブレットベースのフレームワークに適用できるはずです。

ユーザーが切断したかどうか(停止ボタン、ブラウザを閉じたなど)を判断するために、サーバーはパケットの送信を試行する必要があります。TCP / IP接続が閉じられている場合は、IOExceptionがスローされます。

理論的には、Javaアプリケーションは、処理中のさまざまなポイントでスペース文字を送信できます。IOExceptionクライアントが終了し、処理を中止できることを通知します。

ただし、この手法にはいくつかの問題がある可能性があります。

  1. 処理中に文字を送信すると応答が「コミット」されるため、長時間のサーバーサイド処理の結果に基づいてHTTPヘッダーやCookieなどを設定できない場合があります。

  2. 出力ストリームがバッファリングされている場合、スペース文字はすぐには送信されないため、適切なテストが実行されません。回避策として使用できる場合がありますflush()

  3. 特定のフレームワークまたはビューテクノロジ(JSPなど)にこの手法を実装するのは難しい場合があります。たとえば、応答がコミットされた後、ページレンダリングコードはコンテンツタイプを送信できなくなります。

于 2008-09-07T23:14:15.847 に答える