Le plus gros problème avec le suivi de la présence de l'utilisateur (onine/offline) sur HTTP est comment déterminer quand l'utilisateur est déconnecté.
Il est facile de déterminer quand l'utilisateur est en ligne - la simple présence d'une requête authentifiée suppose que l'utilisateur est actif. Cependant, puisque HTTP est sans état, l'absence d'une requête ultérieure peut signifier soit que l'utilisateur est déconnecté, soit que l'utilisateur est en ligne, mais n'a rien fait de spécifique avec votre application récemment.
Ainsi, la meilleure estimation que vous pouvez faire est d'avoir un timeout et si l'utilisateur n'a pas fait une requête pendant ce délai, de passer en mode hors ligne.
L'implémentation la plus simple serait d'avoir un LastTimeActive, comme Jonathan Sampson l'a suggéré. Cependant, cela ne vous donnera pas la longueur de la session utilisateur, seulement une approximation de qui est en ligne en ce moment.
Une approche plus complexe serait d'avoir lastTimeActive et lastTimeLoggedIn. LastTimeLoggedIn est défini au moment de la première demande d'autorisation qui est à plus de 5 minutes d'une demande d'authentification précédente. Un utilisateur est considéré en ligne, s'il y a eu une demande authentifiée au cours des cinq dernières minutes. La longueur de session pour l'utilisateur est la différence de temps entre lastTimeActive et lastTimeLoggedIn.
Si votre application offre également le choix de se déconnecter de l'utilisateur, vous pouvez considérer cette action comme étant hors ligne. Cependant, à moins que votre application ne soit une application bancaire, il est probable que les utilisateurs ferment leur navigateur.
De même, évitez les threads d'arrière-plan pour mettre à jour le statut hors ligne/en ligne de vos utilisateurs.Vous ne devriez exécuter la logique ci-dessus que lorsqu'il y a une demande explicite sur le statut d'un utilisateur particulier et que vous ne devriez mettre à jour que les utilisateurs qui vous ont été demandés.
Oh non ... c'est horrible ... ça va tuer votre serveur ... – Faruz
Je maintiens un portail avec plus de 1000.000 utilisateurs. Mais il n'y a que 100 utilisateurs en ligne à la fois (moins de 1%). Il est préférable de sélectionner/mettre à jour/supprimer une nouvelle table plutôt que d'interroger la table utilisateur. –