-----解決策---------すべてのページの 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');
どういたしまして!
-----解決策---------------------------- 通常のファイルを保存するための鍵は、書き込み時のリソースの排他的問題です。
------解決策---------
1. もちろんセッション一時ファイルの読み込みも可能です。これらは session.save_path
で指定された場所にあります。
2. セッション一時ファイルはプレーンテキストファイルです。これは、簡略化されたシリアル化形式で保存されます。PHP には、セッションのシリアル化機能と逆シリアル化機能がすでに用意されています。自分で見ればわかります
皆さんは保管方法について議論していますが、実は保管方法は主要な問題ではありません
「異常なチャネル離脱」のチェックはポーリングする必要があることが合意されているため、鍵は「どのように特定するか」にあります。次に、すべての解決策を考え出して、それらを PK するだけです (オンラインのユーザーが 10,000 人であると仮定します)