La parole est aux speakers : Kévin Dunglas

Publié le

Jusqu’au Forum PHP 2022, retrouvez nos interviews de speakers pour mieux comprendre leur parcours et le sujet qu’ils ou elles aborderont lors de leur conférence !

La conférence

FrankenPHP, dans les entrailles de l'interpréteur PHP, de machines virtuelles et des threads

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.

Ballroom ABCDEF - Grace Hopper
14/10/2022
14:40-15:20

Tes derniers projets (Mercure, Vulcain) sont tous écrits en Go, comme FrankenPHP. Est-ce le langage complémentaire à PHP ?

Grâce à son support natif de la concurrence (l’emblématique mot-clef « go ») et à sa bibliothèque standard très fournie en implémentation haute-performance des protocoles réseaux, Go permet de créer relativement facilement des services réseaux performants et sécurisés.
C’est pour ça que je l’ai utilisé pour réaliser les implémentations de référence de Mercure et de Vulcain. C’est aussi pour ça que ce langage est en train de devenir hégémonique en ce qui concerne l’infrastructure réseau et cloud : Docker, Kubernetes et Traefik sont également écrits en Go pour ne citer que quelques exemples connus.
Les implémentations de référence de Mercure et Vulcain peuvent être utilisés avec n’importe quel langage de programmation, mais comme ils respectent les standards et que PHP aussi, ces deux outils sont très faciles à utiliser depuis une application PHP : pour envoyer un message aux navigateurs via un hub Mercure (le composant écrit en Go), il suffit de lui envoyer une requête POST à l’aide de curl ou même de file_get_contents() ; pour ajouter le support de Vulcain à n’importe quelle app PHP, il suffit de positionner le reserve proxy écrit en Go devant le serveur web servant l’app PHP.
Concernant FrankenPHP, l’intégration va beaucoup plus loin. L’interpréteur PHP est écrit en C, et Go peut appeler (et être appelé depuis) du code C. L’idée principale de FrankenPHP est de pouvoir embarquer l’interpréteur PHP dans n’importe quel programme Go, et en particulier dans le toujours plus populaire serveur web Caddy, lui aussi écrit en Go.
Comme nous le découvrirons lors de la conférence, cela permet d’exposer les fonctionnalités puissantes de Go (et de Caddy) directement au code PHP.
Cela permet des usages novateurs comme distribuer des applications complètement autonomes (le code PHP est directement embarqué dans le binaire du serveur web), utiliser les bibliothèques optimisées écrites en Go (ex : cache) ou encore tirer partie des nouveautés bas niveau du standard HTTP qui sont quasi-impossibles à implémenter en l’état actuel des choses avec PHP FPM (ex : les Early Hints).
En bref, Go est parfait pour écrire des services réseaux (HTTP en particulier), et est compatible C. PHP permet d’écrire des applications web et est écrit en C, ces deux langages sont effectivement très complémentaires !

FrankenPHP a t-il un jour l’objectif de devenir un projet « production ready » ou est-il destiné à rester un « side-project » ?

L’objectif est clairement de le rendre production ready, et on s’en approche à grands pas !

Tu es un speaker confirmé et un habitué des évènements AFUP, qu’est-ce qui rend l’exercice toujours intéressant après autant de fois pour toi ?

C’est un moment unique qui permet d’échanger avec la communauté et d’avoir des retours de qualité sur des concepts nouveaux. Et puis je dois avouer que ça me motive et que ça me donne une deadline pour finaliser des projets… comme FrankenPHP ! J’ai toujours hâte de pouvoir présenter des nouveaux projets au Forum PHP.

Une conférence présentée par

Kévin DUNGLAS
Kévin DUNGLAS
Kévin est le créateur du framework API Platform ainsi que des projets Mercure et Vulcain. Il est également membre de la Core Team Symfony et a cofondé la société autogérée Les-Tilleuls.coop.

Autres interviews

En poursuivant votre navigation sur ce site, vous acceptez l’utilisation des cookies pour améliorer votre navigation. plus d'infos

1. Qu’est-ce qu’un cookie?

Un Cookie est un petit fichier texte enregistré sur votre terminal (ordinateur, tablette, smartphone, etc.), à l’occasion de la consultation d’un service en ligne grâce à votre logiciel de navigation. Il permet à son émetteur d’identifier le terminal dans lequel il est enregistré, pendant la durée de validité ou d’enregistrement du Cookie. Lors de la consultation de notre site Internet, des informations relatives à la navigation de votre terminal sont susceptibles d'être enregistrées dans ces fichiers dits "Cookies". Ces derniers sont installés sur votre terminal, sous réserve des choix que vous auriez exprimés concernant les Cookies et que vous pouvez modifier à tout moment.

2. A quoi servent les cookies émis sur notre site ?

Seul l’émetteur d’un cookie est susceptible de lire ou de modifier les informations qui y sont contenues.
Les cookies utilisés sur notre site permettent :

3. Vos choix concernant les cookies

Vous disposez de différents moyens pour gérer les cookies. Tout paramétrage que vous pouvez entreprendre sera susceptible de modifier votre navigation sur notre site et sur Internet en général et vos conditions d'accès à certains services de notre site nécessitant l'utilisation de cookies. Vous pouvez à tout moment exprimer et modifier vos souhaits en matière de cookies, par les moyens décrits ci-dessous. L'accord sur les cookies L'enregistrement d'un cookie dans un terminal est essentiellement subordonné à la volonté de l'utilisateur du terminal, que celui-ci peut exprimer et modifier à tout moment et gratuitement à travers les choix qui lui sont offerts par son logiciel de navigation. Si vous avez accepté dans votre logiciel de navigation l'enregistrement de cookies dans votre terminal, les cookies intégrés dans les pages et contenus que vous avez consultés pourront être stockés temporairement dans un espace dédié de votre terminal. Ils y seront lisibles uniquement par leur émetteur.

Le refus des cookies Si vous refusez l'enregistrement de cookies dans votre terminal, ou si vous supprimez ceux qui y sont enregistrés, vous ne pourrez plus bénéficier d'un certain nombre de fonctionnalités qui sont néanmoins nécessaires pour naviguer dans certains espaces de notre site. Tel serait le cas si vous tentiez d'accéder à votre compte ou à votre abonnement qui nécessite de vous identifier. Tel serait également le cas lorsque nous, ou nos prestataires, ne pourrions pas reconnaître, à des fins de compatibilité technique, le type de navigateur utilisé par votre terminal, ses paramètres de langue et d'affichage ou le pays depuis lequel votre terminal semble connecté à Internet. Le cas échéant, nous déclinons toute responsabilité pour les conséquences liées au fonctionnement dégradé de nos services résultant de l'impossibilité pour nous d'enregistrer ou de consulter les cookies nécessaires à leur fonctionnement et que vous auriez refusés ou supprimés. Les choix offerts par votre logiciel de navigation Vous pouvez configurer votre logiciel de navigation de manière à ce que des cookies soient enregistrés dans votre terminal ou, au contraire, qu'ils soient rejetés, soit systématiquement, soit selon leur émetteur. Vous pouvez également configurer votre logiciel de navigation de manière à ce que l'acceptation ou le refus des cookies vous soient proposés ponctuellement, avant qu'un cookie soit susceptible d'être enregistré dans votre terminal. Pour la gestion des cookies et de vos choix, la configuration de chaque navigateur est différente. Elle est décrite dans le menu d'aide de votre navigateur, qui vous permettra de savoir de quelle manière modifier vos souhaits en matière de cookies. Selon votre navigateur, consultez le lien ci-dessous pour configurer votre navigateur et refuser les cookies :