チャット機能を備えた Web サイトを構築しており、オンライン ユーザーとオフライン ユーザーを追跡する必要があります。オンラインユーザーを追跡するために、このテーブルを使用しています
ユーザー ID | タイムスタンプ
すべてのオンライン ユーザーのタイムスタンプを 20 秒ごとに更新します。そのため、現在のタイムスタンプとテーブルのタイムスタンプを比較するだけで、誰がオフラインであるかを知ることができます。
問題は次のとおりです。ユーザーのオンライン ステータスを更新するためにロング ポーリングを使用しました。つまり、ユーザーがログインしたときに、次のようなスクリプトへの ajax 呼び出しを実行します。
<?php
set_time_limit(0);
while(1){
updateUserTimestamp();
sleep(20);
}
?>
上記のコードは問題なく動作していますが、問題は、ユーザーがブラウザを閉じた後もゴースト プロセスのように実行され続け、タイムスタンプを更新してリソースを消費し続けることです。クライアントがブラウザを閉じたときに停止させたいのです。
助けてください。