-2

phpとajaxを使用してチャットシステムを作成しました。ユーザーがこのチャットシステムにログインすると、テーブルis_onlineフィールドのステータスが1に更新されます。このフィールドを使用して、現在のオンラインメンバーを一覧表示しています。

ユーザーがログアウトを押さずにWebサイトのすべてのタブを閉じる場合は、ステータスを0に更新する必要があります。

どうすればいいですか?

4

4 に答える 4

2

失敗の証拠、リアルタイム、効率的な方法はありません

理論的には、ブラウザの状態を安全に判断する方法はありません。DOMonunloadonbeforeunloadイベントなどのイベントがあります。そのイベントへの応答としてAJAXリクエストを添付できるかもしれません。それが設定されonline=0ます。ただし、問題は、このイベントが常に発生するという保証はないということです。(ブラウザのプロセスが強制終了されるとどうなりますか?)

唯一の標準的な解決策は、定期的に非常に軽いAJAXリクエストをサーバーに送信することです。サーバー側のプログラムは、各ユーザーのフィールドを維持し、lastSeenAtTime特定の時間内に要求を受け取らない場合は自動的にゼロに設定する必要があります(10分など)。

于 2012-07-18T11:51:28.863 に答える
0

テーブル内の最後のメッセージ/アクションを追跡します。カウンターを更新するには、最後のアクションが1分前などであったものだけを選択します。また、必要に応じて、is_onlineを使用して、ログアウトを追跡します:)

于 2012-07-18T11:48:02.927 に答える
0

本当に悪い方法。


online_usersフィールドnameとを含むテーブルを作成しますtimeout。ユーザーの名前(またはID、またはその他のID)と現在のタイムスタンプ+ 5分(または別のしきい値、ユーザーが決定)を保存します。

timeoutオンラインユーザーを表示するときは、そのテーブルから現在のタイムスタンプよりも大きいすべてのユーザーを選択します。例:

$time = time();
$result = mysql_query("SELECT `name` FROM `online_users` WHERE `timeout` > '$time'");

そして、1日1回テーブルをクリーンアップするCRONをセットアップします。

そして、更新することを忘れないでくださいtimeout

于 2012-07-18T11:51:40.460 に答える
-1

たとえば、ユーザーがコンピューターをシャットダウンしたときのyahoo msgrのように、ユーザーのアクティビティを5分ごとに確認する必要があると思います。yahooはまだオンラインステータスを示していますが、5分後にはオフラインになります。その私のアルゴリズム。私はあなたが毎秒チェックすることができないと思います、そしてそれはあなたのチェック時間のために遅れがあります

于 2012-07-18T11:44:16.687 に答える