Sont toujours des événements exécutés dans le même processus dans l'azote?

StackOverflow https://stackoverflow.com/questions/1993164

  •  22-09-2019
  •  | 
  •  

Question

Je vais prendre au sujet de la fonction event azote, le framework web Erlang , dans un module Web qui est exécuté quand vous obtenez un postback.

Ne event toujours fonctionner dans le même processus pour le même client Web (qui est, la fenêtre du navigateur ou cadre).

J'ai rappel au moins un cas où cela ne se produisait, mais je ne peux pas reproduire.

Était-ce utile?

La solution

Non, les événements d'azote s'exécutent dans quel processus est en train de traiter la demande Web pour l'azote.

L'azote est un cadre très asynchrone, vous pouvez avoir plusieurs processus de traitement de plusieurs événements pour la même fenêtre du navigateur ou du cadre de manière asynchrone. Cela signifie que vous pourriez très bien avoir différents événements se traités par des processus séparés.

Autres conseils

Hé les gars, je l'ai découvert le registre de processus pour l'azote appelé: nprocreg .
Lorsque vous vérifiez votre dossier des applications ( NITROGEN_INSTALL_DIR de $ / apps / nprocreg ).

Dans cette application, les processus peuvent être frayent sur plus d'un serveur d'applications d'azote même sur plusieurs machines. Pour expérimenter cela, commencer 2 nœuds de Erlang sur deux hôtes differnt. les ping afin qu'ils soient connectés. (net_adm:ping(?OTHER_NODE)). Maintenant, commencez l'azote sur les deux noeuds Erlang. Vous pouvez en fait d'abord commencer à l'azote, puis ping les deux nœuds
Assurez-vous que les deux nœuds d'azote utilisent des noms longs i.e. [NOM] @IP_ADDRESS sur un réseau local.
Maintenant, sur une troisième machine sur votre réseau local, créez un DNS (Nom du serveur). Mettez le même mappage de nom sur deux adresses IP différentes de nos deux nœuds exécutant les applications d'azote. Configurer l'azote des deux ordinateurs pour qu'ils pointent vers l'adresse IP DNS pour les services DNS (en fait le faire pour tous les ordinateurs de votre réseau local).
Vous découvrirez que lorsque vous demandez une page (résidant dans la racine doc des deux applications d'azote) à partir de plusieurs ordinateurs sur votre réseau local, en utilisant le nom mappé dans votre navigateur, vous voyez que le serveur DNS ne une sorte d'équilibrage de charge .
Maintenant, assurez-vous que la page que vous demandez pour peut vous montrer de quel serveur d'azote provenant de son sur l'interface. Cette page doit avoir par exemple un bouton qui génère un événement qui wf:flash(wf:f("Some statement on the interface",[]))
Maintenant, demandez cette page sur deux ordinateurs et où chaque note différente DEJEUNER de. Ensuite, allez à un serveur d'azote et l'arrêter.
Lorsque vous cliquez sur le bouton du navigateur qui a sa page, le serveur d'azote que nous venons de mettre bas, cela fonctionne encore.
Voilà pourquoi, Rusty et les amis ont découvert que si les processus d'azote peuvent être enregistrés dans d'autres applications d'azote, lorsqu'il est exécuté derrière un équilibreur de charge, les événements peuvent être forwardés à une application d'azote dans le cluster.
Bien sûr, cela fonctionne bien si vous assurer que les deux applications sur des machines différentes ont les mêmes pages, des modules et la configuration des chemins. En effet, l'événement fonction de rappel appelant peut-être dire une API de base de données.
Un exemple de l'équilibrage de charge à l'aide du serveur DNS peut être vu quand vous creusez Google à partir de votre terminal sur linux ou solaris comme ceci:

dig www.google.com
Vous verrez que le serveur de noms a le même nom mappé sur plusieurs adresses IP. Cela garantit la disponibilité à travers des domaines et assure une sorte d'équilibrage de charge
/joshmuza@gmail.com

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top