私はApache CXF Webサービススタックを使用しています。クライアントが操作を完了する前にタイムアウトまたはサーバーから切断すると、サーバーは操作が完了するまで操作を実行し続けます。私はクライアントが切断し、それに応じてそれを処理するときに、サーバーを検出させたいと思います。Webサービスでのクライアントの切断の検出
クライアントがApache CXFを使用して切断すると検出する方法はありますか?他のJava Webサービススタックの使用はどうですか?
私はApache CXF Webサービススタックを使用しています。クライアントが操作を完了する前にタイムアウトまたはサーバーから切断すると、サーバーは操作が完了するまで操作を実行し続けます。私はクライアントが切断し、それに応じてそれを処理するときに、サーバーを検出させたいと思います。Webサービスでのクライアントの切断の検出
クライアントがApache CXFを使用して切断すると検出する方法はありますか?他のJava Webサービススタックの使用はどうですか?
私はApache CXFに精通していませんが、以下はJavaサーブレットベースのフレームワークに適用可能です。ユーザが切断したかどうかを決定するために
サーバがパケットを送信しようとしなければならない(停止ボタンは、等ブラウザを閉じた状態)。 TCP/IP接続が閉じられている場合は、IOException
がスローされます。理論的には
、Javaアプリケーションは、処理中にさまざまな時点で空白文字を送信することができます。 IOException
は、クライアントがなくなったことを通知し、処理を中止できます。
しかし、この手法にはいくつかの問題があるかもしれません。
処理中に文字を送信すると、応答は「コミット」ことになりますので、HTTPヘッダ、クッキーなどを設定することができない場合があります。長時間実行されるサーバサイド処理の結果に基づいて。出力ストリームがバッファリングされている場合
、空白文字は、それによって十分なテストを行っていない、すぐに送信されません。回避策としてflush()
を使用することは可能です。
たとえば、ページのレンダリングコードは、応答がコミットされた後にコンテンツタイプを送信できません。