Lors de l'AFUP Day, je vous ai présenté FrankenPHP, un SAPI experimental permettant d'embarquer notre langage préféré dans les serveurs web écrits en Go tels que Caddy ou le serveur web local de Symfony CLI. Ce talk revient sur le progrès effectués depuis l'AFUP Day, et sur les nouveaux problèmes rencontrés suite aux retours de la communauté.

FrankenPHP utilise cgo pour permettre au code Go d'appeller le code de l'interpreteur PHP écrit en C, et inversement. Cela revient à faire exécuter la machine virtuelle de PHP elle même au sein d'un process géré par le runtime Go. Cette technique offre des opportunités immenses :

simplifier vos déploiements en embarquant directement un serveur web, l'interpréteur PHP et votre code source dans un seul binaire ;
conserver les services des applications Symfony ou Laravel chargés dans la mémoire du serveur web et s'en servir pour traiter plusieurs requêtes HTTP ;
écrire des fonctions en Go (ou en C, voir même en assembleur) et les appeler directement depuis le code PHP ou encore

Cependant, faire cohabiter le runtime de deux langages dans un seul process n'est pas chose aisée. Dans ce talk orienté programmation système, nous étudierons tous les pièges que nous avons du contourner pour réaliser ce synchrétisme particulier. Ca sera l'occasion de découvrir comment fonctionne l'interpréteur PHP, son mode ZTS, les threads systèmes et les green threads de Go, les signaux Unix ou encore les problèmes que peuvent poser les astuces utilisées par l'interpréteur PHP pour implémenter des fonctionnalités telles que le max_execution_time.

Note : il n'est pas nécessaire d'avoir vu le premier talk pour assister à celui ci.

Comments

Please login to leave a comment