ホームページ  >  記事  >  PHPフレームワーク  >  Laravelはユーザーがオンラインであるかどうかを追跡する機能を実装します

Laravelはユーザーがオンラインであるかどうかを追跡する機能を実装します

藏色散人
藏色散人転載
2020-01-30 20:57:282685ブラウズ

Laravelはユーザーがオンラインであるかどうかを追跡する機能を実装します

Laravel で簡単なメソッドを使用して、ユーザーがオンラインかどうかを追跡する

今日の私のタスクは、 Laravel プログラムのユーザー プロフィール ページでは、オンラインかどうかを示す緑色の点がユーザー名の横に追加されます。

私が最初に考えたのは、node.js サーバーを起動して、各ユーザーのアクティブなソケット接続を追跡する必要があるということでした。次に、現在ログインしているユーザー ソケットを使用して、オンライン ステータスをリアルタイムで更新できます。

唯一の問題は、これは現在の要件に対して少しやりすぎであり、ライブ チャットなど、第 2 レベルの精度を必要とする機能が実装されるまでは完全に必要ではないことです。

同僚は、現在のニーズに対しては、MySpace が「オンライン」機能を処理する方法で十分かもしれないと指摘しました。私たちが知る限り、MySpace がユーザーがオンラインかどうかを示すために使用している方法は、サイトでの最後のアクティビティに基づいています。

最後のアクティビティが X 分以内だった場合は「オンライン」バッジが表示されますが、そうでない場合は表示されません。単純!

ユーザーの最後のアクティビティのフィールドをユーザー テーブルに追加し、ページ リクエストごとに更新してみましょう。次に、ユーザーがオンラインかどうかを確認する必要がある場合、そのタイムスタンプを現在のタイムスタンプと比較し、X 分以内であればオンラインであると言えます。

これは問題なく動作しますが、構築しているアプリケーションによっては、データベースに不必要な書き込みが追加され、アプリケーションの速度が多少低下します。

適切な妥協案は、この情報をアプリケーション キャッシュに保存することです。キャッシュの利点は、キャッシュの有効期限を設定できるため、このアプローチが簡素化できることです。

キャッシュを使用してこの機能を実装することに決めたので、次の疑問は、すべてのリクエストで実行されるように、このコードをどこで実行する必要があるかということです。実現したいアイデアが 2 つあります。

BaseController を作成し、すべてのコントローラーにそれを継承させる

#ミドルウェアを作成する

#少し考えた後、そして、これまでに作成したすべてのコンストラクターに親コンストラクターへの呼び出しを追加する必要があることに気づき、それをミドルウェアに実装することにしました。

計画はできたので、コードを作成してみましょう。

まず、ミドルウェアを作成する必要があります。ターミナルに次のコマンドを入力します。

php artisan make:middleware LogLastUserActivity

次に、次の php ファイルを開きます。

app/Http/Middleware/LogLastUserActivity.php.

ハンドル メソッドに次のコードを追加します。

 if(Auth::check()) {
$expiresAt = Carbon::now()->addMinutes(5);
 Cache::put('user-is-online-' . Auth::user()->id, true, $expiresAt);
 }

次に、app/Http/Kernel.php ファイルを開きます。 Laravel 5.1 以前を使用している場合は、コードを $middleware 配列に直接配置する必要があります。バージョンが 5.2.* の場合は、Web の $middlewareGroups にコードを配置する必要があります。

コードは StartSession ミドルウェアの下に配置する必要があることに注意してください。そうしないと、認証ファサードがユーザーを正しくログインできません。私の更新構成設定は次のとおりです。

protected $middlewareGroups = [
  'web' => [
  \App\Http\Middleware\EncryptCookies::class,
  \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
  \Illuminate\Session\Middleware\StartSession::class,
  \Illuminate\View\Middleware\ShareErrorsFromSession::class
  \App\Http\Middleware\VerifyCsrfToken::class,
  \App\Http\Middleware\LogLastUserActivity::class,
  ],
 'api' => [
 'throttle:60,1',
 ],
 ];

最後のステップは、この値を検出するメソッドをユーザー オブジェクトに追加することです。

app/User.php に次のメソッドを追加します:

public function isOnline()
{
return Cache::has('user-is-online-' . $this->id);
}

これで、どのページでも次のメソッドを追加できるようになります:

 @if($user->isOnline())
 user is online!!
 @endif

重要注 -- すべてのファサードを紹介するには、必ずファイルの先頭で use を使用してください。

これがこの問題の解決に役立つことを願っています。

laravel フレームワークに関連する技術的な記事については、

laravel チュートリアル 列をご覧ください。

以上がLaravelはユーザーがオンラインであるかどうかを追跡する機能を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。