4 votes

Une façon pythonique/djangonique de gérer les délais d'attente des utilisateurs à l'échelle des secondes (ou des minutes si nécessaire).

L'exemple le plus proche de mon cas est une application de chat Django ajax. Les salles ont besoin de garder une liste des utilisateurs actifs. Outre l'affichage de cette liste d'utilisateurs dans le chat, une salle donnée peut avoir un nombre maximum d'utilisateurs actifs ; les nouveaux utilisateurs doivent être bloqués s'il n'y a pas de salle.

Actuellement, la page du client de chat appelle une vue de sondage toutes les secondes via ajax. La vue sondage renvoie le texte de la pièce. Je pense que poll peut aussi faire un certain type de ping -- ajouter des utilisateurs à un champ M2M active_user sur l'objet Room (j'ai tout cela en place jusqu'à présent). Ce dont j'ai besoin ensuite, c'est de quelque chose qui supprime les utilisateurs de cette liste active_user après un certain délai.

J'imagine qu'il y a deux façons de procéder, et je me demande laquelle serait la plus efficace pour une application qui doit être précise à la seconde près (ou à dix/quinze secondes près) :

  • Utilisation de cookies / sessions / middleware à la ce fil (toutefois, il me semble que cette méthode ne fonctionnerait pas pour les informations instantanées).
  • Un autre modèle, tel qu'une table explicite Users_Rooms 'through' avec un champ date-heure pour l'heure qui est mis à jour lors de la création et à chaque ping suivant, et écrivez une fonction qui nettoie les anciens modèles.

C'est tout ce à quoi je peux penser. J'essaie juste de savoir si frapper mySQL toutes les secondes pour chaque utilisateur et pour chaque pièce est une bonne idée, et je me demande si cette seconde est bien la date limite pour l'utilisation de mySQL. meilleur pour la tâche. Merci !

3voto

Ivan Kharlamov Points 1037

J'utiliserai des sessions et stockerai le dernier ping. datetime comme paramètre de session. Ne vous inquiétez pas des hits de la base de données, si à un moment donné vous sentez que vous en recevez trop, changez simplement votre stockage de session en cache .

Rendez votre application résistante au vidage du cache.

Un de mes amis avait l'habitude d'héberger un jeu de réseau social relativement populaire basé sur Django sur un serveur privé virtuel assez standard, et il a fallu un certain temps avant qu'il ne soit obligé de passer à des sessions basées sur le cache.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X