2009-07-12 5 views
2

[Cela n'a de sens que si vous avez vu « dans la pratique Erlang » screencasts Kevin Smith]mochiweb et gen_server

Je suis un Noob Erlang essayer de construire un système simple Erlang/OTP avec serveur web embarqué [mochiweb ] J'ai parcouru les screencasts EIP, et j'ai joué avec des exemples simples de mochiweb créés en utilisant le script new_mochiweb.erl.

J'essaie de comprendre comment le serveur Web doit se rapporter aux modules gen_server. Dans les exemples EIP [Ch7], l'auteur crée un processus web_server.erl gen_server et lie le processus mochiweb_http à celui-ci. Cependant, dans un projet mochiweb, le processus mochiweb_http semble être «autonome»; il ne semble pas être intégré dans un processus gen_server séparé.

Ma question est la suivante: l'un de ces modèles devrait-il être préféré à l'autre? Si oui, pourquoi ? Ou n'est-ce pas important?

Merci d'avance.

Répondre

1

La raison d'intégrer un processus dans une arborescence de supervision est que vous pouvez le redémarrer en cas d'échec.

Un processus qui gère une requête HTTP répond à un événement généré de manière externe - dans un navigateur. Il n'est pas possible de le redémarrer - c'est la prérogative de la personne qui exécute le navigateur - il n'est donc pas nécessaire de l'exécuter sous OTP - vous pouvez simplement l'engendrer sans supervision.

3

Vous liez des processus à la hiérarchie de superviseurs de votre application pour deux raisons: 1) être en mesure de redémarrer vos processus de travail s'ils se plantent et 2) être capable de tuer tous vos processus lorsque vous arrêtez l'application.

Comme la réponse précédente l'indique, 1) n'est pas le cas pour les processus de traitement des requêtes http. Cependant, 2) est valide: si vous laissez vos processus seuls, vous ne pouvez pas garantir que tous vos processus seront effacés de la VM après l'arrêt de votre application (pensez aux processus bloqués dans des boucles infinies, en attente de réception, etc ...).

Questions connexes