2011-07-24 15 views
0

アクティブなクライアントユーザ名だけがデータベースに存在することを保証するPHPバックエンドの使用中に、フラッシュクライアントの切断またはクローズを検出する方法を教えてください。私のアプローチは、いくつかのポーリング方法を使用することでした。クライアントが定期的にサーバーにメッセージを送信するのは、サーバーがクライアントの名前をDBから削除しているか、閉鎖イベントのバックエンドに通知するjavascriptコードを増やすことです。これは、スクリプトが実行されない突然の不適切な終了の場合に役立ちません。これを行うための他のより効率的な方法がありますか?PHPクライアントからフラッシュクライアントの切断を検出する方法は?

答えて

1

ポーラー方式は、これまで私がどのようにこの問題に対処しているかです。設定された間隔でphpハートビートスクリプトをポーリングするようにフラッシュを設定すると、ユーザーセッションの最終アクセス日時が更新されます。その後、ハートビートがセッションを停止した場合、期限切れのセッションをクリーンアップすると無効になります

+0

ハートビートが停止しているかどうかを確認するにはどうすればよいですか?ユーザーが切断するとスクリプトは実行を停止しませんか?また、名前がデータベースにリストされ、アイドル状態のクライアントを削除する複数のクライアントからの 'ハートビート/ポーリングの停止'などの状態を継続的にチェックするスクリプトがありますか?そのスクリプトは独立して実行する必要があります。 – Astromaz3

+0

フラッシュクライアントが閉じている場合、ハートビートは停止します。設定された時間よりも古いセッションを期限切れにする独立したジョブがあるはずです – plague

+0

私は独立して実行するスクリプトを実行する方法を知らなかった。 sleep()やその他の遅延関数を使用すると、ユーザーが切断したときに機能しないようです。 connection_aborted()は信頼できません。 Zend amfを使うと事が複雑になります。私はいくつかのサーバーメンテナンス/ユーザーチェックコードをこことそこにぶつけてポーリング技術を達成しました。だから、どんなユーザーがスクリプトを起動しても、何を問わず、サーバーのクリーンアップが行われます。明らかに、最後のユーザーのサーバーデータには何らかのデータが残っています。しかし、新しいユーザーがスクリプトを開始すると、それは消去されます。時間()func.に依存して実行されました。 – Astromaz3

関連する問題