5 votes

Comment maintenir l'état entre différentes sessions d'utilisateurs dans une application en anneau ?

J'ai besoin de maintenir un état global sur le serveur à travers différents navigateurs / sessions d'utilisateurs.

Je suppose que tous les atomes etc. créés lors d'une demande sont spécifiques à cette demande. Une fois que la réponse est renvoyée, tout cet état est détruit et la mémoire est libérée. Veuillez me corriger si je me trompe.

L'état des demandes pour une session spécifique peut être maintenu en mémoire en utilisant l'intergiciel de session.

Cependant, comment puis-je maintenir l'état à travers plusieurs sessions et requêtes d'utilisateurs ? Si possible, je voudrais éviter l'utilisation de memcached / redis etc pour le stockage externe. Est-il possible de le faire dans la mémoire elle-même ?

9voto

mikera Points 63056

Voulez-vous dire que vous voulez un état global qui est partagé entre toutes les sessions ?

Si c'est le cas, c'est facile, il suffit de déclarer un atome ou une référence dans l'espace de nom de votre choix et il sera partagé par toutes les sessions, par exemple :

(def my-state (atom {:foo 1 :bar 2}))

Cela fonctionne parce que l'environnement Clojure persiste aussi longtemps que le serveur d'application continue de fonctionner, et que toute demande future sera en mesure d'observer / de modifier l'état global.

Cela dit, il convient de rappeler que l'état global est souvent une odeur de conception . Vous devriez vous demander si vous en avez vraiment besoin, ou si vous devriez envisager une autre alternative (par exemple, pousser l'état partagé dans une base de données).

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