2016-03-18 7 views
0

1ログアウト)私が満足するには、以下の要件が必要になります。サーバーは、要求にサービスを提供されるまで クライアントの要求(長時間実行プロセス)が待機しなければなりません。差別ブラウザクローズイベントと

現在のソリューション: クライアントはそれとリクエストのステータスと をチェックするために、すべての5秒もセッションを維持ping要求に続いて要求を開始します。クライアントは、アプリケーション内の他のタブに移動して戻ってくる場合

2)は、クライアントがまだプロセスのステータスを表示する必要がありますし、サーバーはリクエストに応じて作業を続ける必要があります。

3)クライアントがブラウザを閉じるかログアウトした場合、サーバーはプロセスを停止する必要があります。

PS:IE-9、Chrome、Firefoxの後のすべてのブラウザで機能が必要です。

答えて

1

猫の皮膚にはたくさんの方法がありますが、これは私がそれを達成する方法です。 は、リクエストに一意の識別子を割り当てる(あなたがレディ状態数秒ごとに要求しているとあなたは、ほとんどの場合、これを行っています)。

セッションデータのメンバーを一意のIDに設定します。

プロセスを継続的にチェックするために必要なJSを読み込むようにすべてのページを設定しますが、JSは識別子を使用しないでください。 AJAXリクエストを解析スクリプトで

、それは一意の識別子のセッションを確認し、最後の要求及び固有の識別子の時間と内部システム(ファイルまたはデータベース)を更新有します。 を押して、プッシュする詳細がある場合は詳細をプッシュバックします。

他のシステム(cronシステムのような)やプロセス自体(ループの場合など)では、一意の識別子と最後のタイムスタンプのタイムスタンプで更新されたものと同じデータベースまたはファイルシステムをチェックします。タイムスタンプが古すぎる場合は、15秒(ページロード時間が5秒の間隔を遅らせる可能性があることを覚えておいてください)、cron'dの場合はプロセスを終了するか、プロセススクリプト内にある場合はプロセスを自殺してください。

ログアウトするとセッションデータが消去され、テーブル/ファイルの更新が不可能になります(チェックする必要があります)。ログアウトから数秒後にプロセスが停止するようになります。

+0

私はファイルやDBにIDとタイマーを維持するというコンセプトが好きでした。 JSをどこにでも追加する必要はありません。 – krupalpatel86

+0

タイムアウトを延長することができますが、本当に必要なのは、バックエンドシステムが読み取ることができるアクティビティの状態です。 JavaScriptを完全に削除した場合、タイムアウトを2-3分に設定し、すべてのページナビゲーションでリセットする必要があります。これはまた、プロセスの進捗状況を見て、人がページに10分間座っていないことを望んでいます。進行状況が連続チェック(積極的なajaxのような)によって積極的に更新されていない場合、これは最も実行可能なオプションかもしれません。 –

0

ログアウトのための信頼できる解決策を見つけることができません。 window.onbeforeunloadはサーバーとの通信を許可しません(組み込みダイアログのみを使用してユーザーにプロンプ​​トを表示することができます)。おそらく、ログアウト/放棄のキャプチャの解決策を見つけるのではなく、サーバーのプロセスにそれらのpingを待つためのロジックを追加してください(放棄するまでに30秒間コミットしないでください)。そうすれば、サーバーのサイクルをそれほど浪費することはなく、以前と同じように監視を行うことができます。

関連する問題