2008-10-23 14 views
3

Je prévois d'utiliser php dans un environnement intégré. Notre serveur web actuel est thttpd. Je considère deux options maintenant: si l'exécuter en tant que CGI ou en tant que module SAPI. Je sais que cgi a un avantage en termes de sécurité. Mais si nous devons utiliser php comme cgi, une instance de php devrait être chargée dans la mémoire pour chaque requête.PHP en tant que module thttpd vs CGI en termes d'utilisation de la mémoire

J'ai essayé de le compiler sous la forme d'un module SAPI de thttpd et j'ai observé que l'utilisation de la mémoire de thttpd, en particulier rss, ne grossissait pas à mesure que le nombre de requêtes augmentait.

Quelqu'un peut-il expliquer comment thdpd charge PHP? Est-il chargé une seule fois et reste-t-il résident dans la mémoire tant que thttpd est en cours d'exécution? Si oui, nous pouvons considérer cela comme une alternative à CGI.

Effectue-t-il le multi-threading, c'est-à-dire s'il y a plusieurs requêtes http en même temps? ou est-ce qu'il traite une demande à la fois?

Existe-t-il une bonne documentation sur le comportement de php en tant que module de thttpd?

Répondre

1

Je n'ai aucune expérience avec thttpd, mais voici quelques conseils:

  • le moteur PHP est thread-safe, mais certaines extensions ne sont pas, si généralement les gens répugnent à l'utiliser dans un environnement multi-thread environnement et plutôt aller avec la méthode one-process - one-request
  • oui, généralement les modules webserver (comme le mod Apache *) fonctionnent en restant résident, mais le grand speedbump pour PHP est qu'il doit analyser le fichier source (ou même plusieurs fichiers source si vous utilisez include/require) pour chaque requête. Vous pouvez réduire cela en utilisant quelque chose comme APC qui met en cache la version analysée des fichiers
  • il y a aussi un protocole appelé FastCGI que vous pourriez vouloir regarder - il est fondamentalement un croisement entre le module et la solution CGI - il fait tourner un couple de processus, chaque processus héberge une seule instance du problème CGI (PHP dans ce cas) et les utilise pour traiter les requêtes. Les instances sont recyclées (c'est-à-dire qu'elles peuvent traiter plusieurs demandes, les unes après les autres).