2011-07-22 4 views
2

J'ai essayé d'implémenter une passerelle de serveur Web (à des fins ludiques et éducatives) et j'ai quelques questions sur l'architecture de base derrière FastCGI/SCGI par rapport au modèle pré-fourche.Pré-fourche FastCGI/SCGI

Comment les implémentations FastCGI/SCGI gèrent-elles la communication dans les scénarios pré-fork? AFAIK, la passerelle n'a qu'un seul socket pour se connecter au serveur FastCGI. Normalement, il existe un processus parent qui accepte les connexions de la passerelle et transmet le travail à l'un des travailleurs pré-fourchus.

Étant donné que les connexions sont établies après les enfants sont fourchus, comment devez-vous que les enfants utilisent ces sockets pour communiquer avec la passerelle?

Répondre

1

J'espère avoir compris la question.

Le socket serveur doit être créé par le processus parent; quand il bifurque, les enfants héritent de ce socket, ce qui en fait une ressource partagée. Ensuite, je suppose, chaque enfant essaie d'accepter() des connexions simultanément.

Comme référence, je trouve this document (voir « accepter sérialisation ») discuter problème de la faim lors de l'écoute sur plusieurs prises et this SO discussion sur les sockets de partage

+0

Belle trouvaille. La discussion sur le SO mérite vraiment d'être lue. J'aime aussi que cela fonctionne sur les systèmes UNIX et Windows. Pour une solution qui facilite l'équilibrage de charge, consultez [la réponse de Nikolai] (http://stackoverflow.com/questions/6797222/fastcgi-scgi-pre-fork/7068718#7068718). –

1

Une des options est file descriptor passing sur socket de domaine UNIX. Stevens UNP a basic example.

+0

Cela semble assez simple et permet au processus parent d'effectuer l'équilibrage de charge plus facilement. C'est un UNIX spécifique, mais ce type de conception est en quelque sorte spécifique à UNIX en premier lieu. Une idée de la façon dont cela est portable entre les systèmes UNIX (par exemple, est-ce un comportement facultatif mais commun)? –

+0

AFAIR Windows a une facilité comparable, voir les liens dans la réponse @ftartaggia. –