Re,
Post by Mickael WolffPourtant historiquement et techniquement, c'est un point de vu que je
considère valable.
Tout dépend ce qu'on met sous "historiquement". Revenons à la fin 1999
ou début 2000 en PHP 3.04 (oui, ça fait 10 ans que je fais du PHP à
haute dose, il n'y en a pas beaucoup qui peuvent en dire autant). Où en
étaient les concurrents de PHP ? Bah pas très loin. Le c# n'existait
pas, .net non plus, jsp était encore plus dans la panade qu'aujourd'hui.
Donc "historiquement", PHP avait un net avantage d'outsider dans le
monde des webapp.
Post by Mickael WolffMais je suis ouvert à la discussion :) Qu'est-ce qui
t'amène à considérer ma description comme réductrice et fausse ?
C'est surtout le déni de "langage de programmation" qui me gêne. Ce
n'est pas parce que la gestion du multi-thread ou du multi-fork n'est
pas proposée aisément par le socle technique que tu peux dire "ce n'est
pas un langage de programmation".
Certes, les premières instructions en langage C qu'on m'a apprises à
l'école après les I/O c'était fork() et wait() et l'IPC, mais ce n'est
pas parce qu'on en a moins besoin **en environnement web** que c'est
primordial.
PHP peut être utilisé dans trois modes:
1) web
2) shell/daemon
3) php-gtk (stand alone comme java/awt)
Qu'il ne soit pas simple de faire du multi-thread dans le cas où il est
**l'esclave** d'un serveur web qui lui donne la becquée et à qui il
renvoit le flux de sortie ne peut pas justifier de dire que ce n'est pas
un langage de programmation et seulement un outil de templating. Je te
rejoins sur le fait que PHP **EST** un outil de templating (et il
faudrait arrêter de couiner sur les perfs de tous les smarty et autres
surcouches inutiles), mais ce n'est pas SEULEMENT un moteur de template.
La simple(*) lecture de la table de matières du manuel rappelant tout ce
qu'on peut faire avec PHP devrait aider à s'en convaincre.
(*) ouais, enfin depuis leur réorganisation de m***e, même moi je n'y
retrouve plus mes petits, j'ai passé plusieurs minutes hier à chercher
la liste de toutes les fonctions sur les tableaux.
Post by Mickael WolffPost by John GALLETNous sommes d'accord, on peut faire un daemon qui va le faire
régulièrement, stocker l'information, et avoir un bout de webapp qui ne
fait que lire ce résultat. Pour diverses raisons, ce n'était pas
souhaitable.
C'est ce point là qui est intéressant, et qui justifie la
parallélisation : pourquoi n'était-ce pas souhaitable ?
Déjà parce que ce sont des ressources qu'il faut solliciter le moins
possible (presses industrielles). Donc avoir un cron qui fait du polling
actif pour des prunes, bof. Et aussi parce que quand on déboule me voir
en disant "ça merde", j'ai besoin d'une vision instantanée, pas de ce
qui s'est passé il y a 10 minutes.
Ensuite parce qu'il faut le stocker quelque part. Et non, je n'avais pas
sous la main une base de données que je pouvais utiliser pour ça et pas
du tout envie et encore moins le temps de faire un stockage fichier
propre en RRD ou autre. Après parce qu'il faut avoir justement un accès
à une machine qui va avoir la crontab qui va bien, qui va avoir de quoi
faire la demande (php en CLI). En gros, pour faire l'architecture
propre, il me fallait un projet, un budget temps, l'équipe sysadmin sans
laquelle je n'ai pas le droit d'aller pisser etc. Alors qu'en faisant la
requête directement, en 40 minutes de pause déjeuner c'était torché et
ça répondait au besoin.
Post by Mickael WolffParce que dans l'absolu, l'architecture dans laquelle la responsabilité de consulter
les sources XMLRPC devrait effectivement être déléguée à un script en
cron (en PHP par exemple).
Souvent oui. S'il n'y en a qu'une ou que tu veux absolument une
information synchrone, non.
Post by Mickael WolffPost by John GALLETOn peut aussi faire exec("monshell.sh") avec les risques que ça comporte
et avoir dans le shell un wget monurl.php & <- noter le background
Si tu savais combien de fois j'ai vu ça dans des systèmes pro :D
Sur le fond ça ne me gêne pas tellement si on comprend ce qu'on fait.
Mais il est vrai que dans ce cas spécifique là, je l'ai fait en java en
lançant un thread sur chaque machine et ça a réduit drastiquement le
temps de réponse car je passais de sérialisation à parallélisation.
Post by Mickael WolffPersonnellement je n'aurais pas confiance en PHP pour faire ça. Tant
que PHP reste simple et qu'il meurt vite, je suis ok. Mais ensuite, les
fuites mémoires et les problèmes liées aux performances me rendent nerveux.
J'ai de facto moins de problèmes de perfs et de consommation avec des
daemon en PHP qu'en java... Et j'ai 10 fois plus de JVM de serveur
d'appli qui explosent en vol que d'apache/php qui sont à la peine.
Si je peux je préfère rester en C/C++ ou shell, et bien que ne sachant
que le lire, je constate d'excellents résultats avec python.
Ne pas oublier non plus que toute config de prod apache peut tirer
profit du MaxRequestPerChild et que de toutes façons, il n'est jamais
mauvais de faire un restart des serveurs web/d'appli tous les jours.
HTH
JGA