Heim  >  Artikel  >  PHP-Framework  >  Laravel implementiert die Funktion, zu verfolgen, ob der Benutzer online ist

Laravel implementiert die Funktion, zu verfolgen, ob der Benutzer online ist

藏色散人
藏色散人nach vorne
2020-01-30 20:57:282615Durchsuche

Laravel implementiert die Funktion, zu verfolgen, ob der Benutzer online ist

Verwenden Sie eine einfache Methode in Laravel, um zu verfolgen, ob der Benutzer online ist

Heute besteht meine Aufgabe darin, zu verwenden Laravel-Anwendung Auf der Benutzerprofilseite des Programms wird neben dem Benutzernamen ein grüner Punkt hinzugefügt, um anzuzeigen, ob sie online sind.

Mein erster Gedanke ist, dass wir einen node.js-Server starten und die aktiven Socket-Verbindungen für jeden Benutzer verfolgen müssen. Mithilfe des aktuell angemeldeten Benutzer-Sockets können wir dann den Online-Status in Echtzeit aktualisieren!

Das einzige Problem ist, dass dies für unsere aktuellen Anforderungen etwas übertrieben ist und nicht unbedingt notwendig ist, bis wir Funktionen haben, die eine zweite Genauigkeitsstufe erfordern, wie zum Beispiel Live-Chat.

Ein Kollege wies darauf hin, dass die Art und Weise, wie MySpace mit „Online“-Funktionen umgeht, für die aktuellen Bedürfnisse ausreichend sein könnte. Soweit wir wissen, basiert die Art und Weise, wie MySpace anzeigt, ob ein Benutzer online ist, auf seiner letzten Aktivität auf der Website.

Wenn ihre letzte Aktivität innerhalb von X Minuten erfolgte, zeigen wir ein „Online“-Abzeichen an, andernfalls nicht. Einfach!

Fügen wir der Benutzertabelle ein Feld für die letzte Aktivität des Benutzers hinzu und aktualisieren es bei jeder Seitenanforderung. Wenn wir dann überprüfen müssen, ob der Benutzer online ist, können wir diesen Zeitstempel mit dem aktuellen Zeitstempel vergleichen. Wenn er innerhalb von X Minuten liegt, ist er online!

Dies kann zwar gut funktionieren, führt jedoch abhängig von der Anwendung, die Sie erstellen, zu unnötigen Schreibvorgängen in der Datenbank, was Ihre Anwendung etwas verlangsamt.

Ein guter Kompromiss besteht darin, diese Informationen im Anwendungscache zu speichern. Der Vorteil des Caching besteht darin, dass dieser Ansatz vereinfacht werden kann, da der Cache so eingestellt werden kann, dass er abläuft.

Nachdem wir uns nun entschieden haben, diese Funktion mithilfe von Caching zu implementieren, lautet die nächste Frage: Wo soll dieser Code ausgeführt werden, damit er bei jeder Anfrage ausgeführt wird? Ich habe zwei Ideen umzusetzen:

Erstellen Sie einen BaseController und lassen Sie alle Ihre Controller ihn erben

Erstellen Sie eine Middleware

Nach einigem Nachdenken, Als mir klar wurde, dass ich allen Konstruktoren, die ich geschrieben habe, einen Aufruf des übergeordneten Konstruktors hinzufügen musste, entschied ich mich, ihn in Middleware zu implementieren.

Wir haben einen Plan, lasst uns in den Code einsteigen!

Zuerst müssen wir eine Middleware erstellen. Geben Sie im Terminal den folgenden Befehl ein:

php artisan make:middleware LogLastUserActivity

Als nächstes öffnen wir die folgende PHP-Datei

app/Http/Middleware/LogLastUserActivity.php.

und fügen den folgenden Code in die Handle-Methode ein:

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

Als nächstes öffnen wir die Datei app/Http/Kernel.php. Wenn Sie Laravel 5.1 oder früher verwenden, sollten Sie Ihren Code direkt im $middleware-Array platzieren. Wenn Ihre Version 5.2.* ist, sollten Sie den Code in $middlewareGroups of Web platzieren.

Beachten Sie, dass der Code unterhalb der StartSession-Middleware platziert werden muss, da sonst die Auth-Fassade den Benutzer nicht korrekt anmeldet. Meine Update-Konfigurationseinstellungen lauten wie folgt:

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',
 ],
 ];

Der letzte Schritt besteht darin, unserem Benutzerobjekt eine Methode hinzuzufügen, um diesen Wert zu erkennen.

In app/User.php fügen wir die folgende Methode hinzu:

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

Jetzt können Sie auf jeder Seite die folgende Methode hinzufügen:

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

Wichtig - Stellen Sie sicher, dass Sie oben in Ihren Dateien verwenden, um alle Fassaden einzubeziehen!

Ich hoffe, das hilft Ihnen bei der Lösung dieses Problems!

Weitere technische Artikel zum Laravel-Framework finden Sie in der Spalte Laravel-Tutorial!

Das obige ist der detaillierte Inhalt vonLaravel implementiert die Funktion, zu verfolgen, ob der Benutzer online ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen