Sie können datetime für den Feldtyp verwenden und vergessen Sie nicht, die Benutzer-IP-Adresse aufzuzeichnen, damit Sie die Zeit verfolgen können.
Je nachdem, wie es funktionieren soll, haben Sie grundsätzlich zwei Möglichkeiten:
Definieren Sie eine Zeitüberschreitung, nach der Sie einen Benutzer als ausgeloggt betrachten Verwenden Sie ajax / websockets / whatever, um Benutzer abzufragen
%Vor%Dies ist der einfachere Anwendungsfall. Jedes Mal, wenn der Benutzer eine Seite anfordert, aktualisieren Sie einen Zeitstempel in Ihrer Datenbank.
Um herauszufinden, wie viele Benutzer online sind, würden Sie eine Abfrage für diese Datenbank durchführen und einen ZÄHLER von Benutzern ausführen, die in den letzten N Minuten aktiv waren.
Auf diese Weise erhalten Sie eine relativ genaue Vorstellung davon, wie viele Personen die Website derzeit aktiv nutzen.
%Vor%Dies ist etwas komplexer zu implementieren, da der Server mit Ajax aktualisiert werden muss. Ansonsten funktioniert es in ähnlicher Weise wie # 1.
Wenn sich ein Benutzer auf einer Seite befindet, können Sie einen Websocket geöffnet lassen oder alle N Sekunden Anfragen an den Server senden.
Auf diese Weise können Sie sich ziemlich gut vorstellen, wie viele Personen derzeit auf Ihrer Website Seiten geöffnet haben. Wenn jedoch ein Nutzer die Seite in seinem Browser geöffnet lässt und nichts unternimmt, zählt er dennoch als online .
Eine kleine Änderung an der Idee wäre, ein Skript auf dem Client zu verwenden, um die Mausbewegung zu überwachen. Wenn der Benutzer die Maus nicht etwa 10 Minuten lang auf Ihrer Seite bewegt, würden Sie den Abruf stoppen oder den Websocket trennen. Dies würde das Problem beheben, dass Benutzer angezeigt werden, die nicht online sind.
Ich entwickle ein Projekt von mir mit Skalierbarkeit und bin an eine Kreuzung gekommen. Auf meiner Website möchte ich feststellen, ob ein Benutzer online ist oder nicht. Und ich kann mir nicht den besten Weg vorstellen, damit umzugehen. Die Art, wie ich nachdachte, wäre etwas in dieser Richtung (im Pseudocode):
%Vor%Wenn ich mich also anmelde, könnte ich seine %code% -Spalte auf %code% aktualisieren. Dies würde jedoch dazu führen, dass SQL-Abfragen jedes Mal ausgeführt werden, wenn sich ein Benutzer anmeldet, und wenn es passiert, dass ich sage, 10 Logins pro Sekunde, nun, das sind viele Anfragen. Eine andere Art, wie ich dachte, ich könnte dasselbe tun, aber in einer anderen Tabelle:
%Vor%Aus irgendeinem Grund glaube ich, dass dies aufgrund der Trennung von der Tabelle %code% zu weniger Speicherverbrauch führen würde. Ich bin mir jedoch nicht sicher, ob dies tatsächlich Auswirkungen auf die Leistung haben würde.
Wenn Sie mich also mit Ihrer Einsicht segnen könnten, wäre ich mehr als dankbar, danke.
Im Allgemeinen ist es üblich, der Benutzertabelle eine Spalte hinzuzufügen, um die %code% -Zeit zu speichern. Wenn sich der Benutzer anmeldet oder auf eine Seite zugreift, speichern Sie die aktuelle Uhrzeit in diesem Feld. Wenn Sie wissen möchten, ob sie online sind oder nicht, sehen Sie, ob die zuletzt aufgezeichnete Zeit in einem bestimmten Fenster liegt - beispielsweise fünf Minuten. Sie können alle Zeilen abfragen, um zu sehen, wie viele Benutzer gerade online sind.
Ich würde mir keine Sorgen machen, dass alle paar Sekunden Abfragen ausgeführt werden - Ihr Server kann damit umgehen (vorausgesetzt, diese sind gut geschrieben und nicht sehr ausführlich).