ホームページ >バックエンド開発 >PHPチュートリアル >ユーザーがオンラインかオフラインかの判断に関する問題

ユーザーがオンラインかオフラインかの判断に関する問題

WBOY
WBOYオリジナル
2016-06-13 12:50:05878ブラウズ

ユーザーがオンラインかオフラインかの判定について!
最初の要件は、オンライン ユーザーのニックネームとオンライン人数を表示するディスプレイを作成することです。

次に、私の個人的なアイデアは、ユーザー テーブルにフィールドを作成して、ユーザーがオンライン (1) であるかオンラインでない (0) かをマークすることです。ユーザーがログインするときに、このフィールドを 1 に設定します。終了するときは、このフィールドを 0 に設定します。この方法では、オンライン ユーザーを定期的に更新できます。この場合、機能に問題はありませんが、ユーザーが [安全] をクリックしない点が例外です。終了してもブラウザを直接閉じてしまうと、このユーザーは永遠にオンラインのままになってしまうのではないでしょうか?したがって、私の質問は、ユーザーが異常なチャネルを介して離脱した後、オンラインであるかどうかを検出する方法です。

助けてください~~~~


-----解決策---------
すべてのページの js ファイルに public を追加します。その中の特定の js 関数は、特定の php ファイル (a.php など) に ajax リクエストを定期的に送信する役割を果たします。最終リクエスト時刻は毎回 a.php によってセッションに書き込まれます

たとえば、リクエストが 2 分ごとに送信されるように設定します。ユーザーがオンラインかどうかを確認する必要があるページで、セッション内の最後のリクエスト時刻を読み取り、現在の時刻から最後のリクエスト時刻を減算します。その時間が 2 分を超えている場合、ユーザーはオフラインです。
------解決策------------------
この問題の多くのケースは、オンラインで簡単に見つけることができます。
最も軽量な方法を使用する場合は、セッション一時ファイルの数または他のストレージ方法のユニット数を数えて、現在の 20 分間にオンラインになっている数を判断できます。もちろん、この時間精度は 1 分にまで低下する可能性があります (セッション リサイクル メカニズムの消費量もそれに伴い増加します)。
どのような解決策を採用しても、この機能は依然としてサーバー上で大量のコストを消費します。あまり必要でない場合は、あきらめることをお勧めします。
------解決策--------
正しいアイデアであり、memcache などのサードパーティに頼ることはありません。ツールメソッドは
です 分析: オンライン統計の難しさは、グローバルな共有方法がないことです
分析方法:
ファイルを使用してオンライン ユーザー情報を保存すると、テキスト処理は実際にはデータベースよりもはるかに高速になります (PHP がデータベースに接続するのにかかる時間は、PHP が小さなテキストを読み取るのにかかる時間を超えます)
テキストに保存される形式は配列であり、形式は
です
<br />
<?php<br />
return array(<br />
   20312=>13671927362,//key值为用户uid    value值当用户登陆的时间戳<br />
   20313=>13671927363,<br />
);<br />

1: ユーザーがログインすると、現在のタイムスタンプが取得され、セッションはユーザー ID を記録します
2: 次に、オンライン ユーザー情報が保存されているテキスト内のファイルを取得し、現在の uid がそこに存在するかどうかを確認し、存在しない場合はそれを挿入し、
の保存を続けます。 3: オンラインの人数を取得するには、ファイルを読み取り、オンラインの人数を数えます
4: このファイルにアクセスしている限り (オンラインの人数を数える準備をしている場合でも、新しいユーザーを参加させる準備をしている場合でも)、テキスト内のデータを調べて、各ユーザーのタイムスタンプが現在のタイムスタンプより小さいかどうかなどを確認します。 30 分以内に削除してください。
実装手順の重要なポイント:
テキストを配列として取得
$online=require 'xxx.php';
テキストを配列として保存
$data[1111]=123748492;
file_put_contents('xx.php','390f04def50bab1a933d06c8eaac4051');
どういたしまして!
-----解決策----------------------------
通常のファイルを保存するための鍵は、書き込み時のリソースの排他的問題です。
------解決策---------
引用:
すべてのセッション一時ファイルは sessionId に依存します。sessionId は異なり、一時ファイルのディレクトリも異なります。
質問があります:
1: 一時フォルダー内のセッション ファイルは暗号化されていますか?
2: テキストの場合、そこに保存されるのはセッションのコンテンツですか? では、それらの配列とオブジェクトはテキストにどのように保存されますか?

1. もちろんセッション一時ファイルの読み込みも可能です。これらは session.save_path
で指定された場所にあります。 2. セッション一時ファイルはプレーンテキストファイルです。これは、簡略化されたシリアル化形式で保存されます。PHP には、セッションのシリアル化機能と逆シリアル化機能がすでに用意されています。自分で見ればわかります

皆さんは保管方法について議論していますが、実は保管方法は主要な問題ではありません
「異常なチャネル離脱」のチェックはポーリングする必要があることが合意されているため、鍵は「どのように特定するか」にあります。次に、すべての解決策を考え出して、それらを PK するだけです (オンラインのユーザーが 10,000 人であると仮定します)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。