クライアントが動作している間に、サーバーがHTTP接続を閉じたときに、クライアント側のJavaScriptを検出することができますか?
-
09-09-2019 - |
質問
は、私のアプリケーションでは、クライアントはブラウザ内の関数のJavascriptの集合であり、それはいくつかの作業を行います - クリップの再生、例えば。 これは、サーバーと通信するためにXmlHttpRequestのを使用しています。 ただし、サーバはそれはそう他に方法がないため、急激クライアントを中断し、接続を閉じます。 クライアントは、それがクリップを再生している間に接続が閉じられましたことを、検出し、そのメッセージを印刷し、ページを消去することはできますか? すべてのヘルプは大歓迎します。 おかげで、 アニル
解決 3
サーバーが に接続が閉じていることをクライアントに通知することができないように見えるん。しかし、提案ポーリング方式は、通知があったであろうほど効率的ではありません。
私は次のGetリクエストで、クライアントはそのセッションが無効であることを告げられることを指定して、それを解決します。
JavaScript関数によって送信される各要求に付加する「JSESSIONID = [ID]」 -これは、URL書き換えによって実現しました。サーブレットは、現在のセッションIDを格納します。
他のヒント
クリップをクライアントにストリーミングされている場合、あなたはそれの提供を停止可能性があります。
クリップをダウンロードして、ブラウザを介して再生されているように、しかし、それはそうです。この例では、CookieOfFortuneによって記載されているように、ウォッチドッグ・アプローチを使用することをおそらく最善です:(その1秒に1回または)定期的にサーバーをポーリングし、それが確認の小さなメッセージで応答し得ます。接続が閉じられると、負messgageで応答するサーバーを取得します。
残念ながら、彗星のようなシステムを使用せずに、それはセッションの閉鎖を示すメッセージを「送信」にサーバーを得ることは非常に難しいます。
ベア念頭にかかわらず、クライアントは、彼らがしたい場合は、完全にそれを再生することができますクリップをダウンロードしたとして、すぐにそれ。残念ながら、ストリーミング方式への切り替え以外にこれを停止する方法はありません。あなたのコンテンツを確保することが優先事項であるならば、私はこの変更を行うことをお勧めしたい。
あなたは、おそらくこれだけの接続が閉じているかどうかを確認するためにしばらく一度のハートビートを送信しようと、XMLHttpRequestオブジェクトをポーリングすることができます。そうでない場合は、サーバーは接続を閉じるために起こっているクライアントに伝えるために、いくつかの信号を送信する必要があります。