2008-09-07 12 views
6

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

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

答えて

2

私はApache CXFに精通していませんが、以下はJavaサーブレットベースのフレームワークに適用可能です。ユーザが切断したかどうかを決定するために

サーバがパケットを送信しようとしなければならない(停止ボタンは、等ブラウザを閉じた状態)。 TCP/IP接続が閉じられている場合は、IOExceptionがスローされます。理論的には

、Javaアプリケーションは、処理中にさまざまな時点で空白文字を送信することができます。 IOExceptionは、クライアントがなくなったことを通知し、処理を中止できます。

しかし、この手法にはいくつかの問題があるかもしれません。

  1. 処理中に文字を送信すると、応答は「コミット」ことになりますので、HTTPヘッダ、クッキーなどを設定することができない場合があります。長時間実行されるサーバサイド処理の結果に基づいて。出力ストリームがバッファリングされている場合

  2. 、空白文字は、それによって十分なテストを行っていない、すぐに送信されません。回避策としてflush()を使用することは可能です。

  3. たとえば、ページのレンダリングコードは、応答がコミットされた後にコンテンツタイプを送信できません。

関連する問題