PHP Magazin: Wer ist die Zielgruppe von phpDaemon?
Vasily Zorin: Die Zielgruppe sind diejenigen, die ein Projekt mit hoher Last verwalten müssen, und diejenigen, die Non-HTTP-Anwendungen mit WebSockets entwickeln wollen.
Der Daemon ist von Natur aus eventgetrieben. Jeder Worker-Prozess hat nur einen echten Thread, aber da es keine sleep()-Calls gibt, funktioniert das ohne Lags. In einer Code-Basis mit synchronem I/O hingegen, wo es sleep()-Calls gibt (wie sie in Dateisystem-Aufrufen und DB-Anfragen verwendet werden), würden solche Aufrufe den kompletten Prozess blockieren. In einem solchen Fall müsste die Zahl der Worker erhöht und die Zugriffe pro Worker gesenkt werden. Bei asynchronem I/O hingegen (es gibt etliche built-in Clients und APIs) kommt man mit einer kleinen Zahl von Workern aus.
PHP Magazin: Was ist das Tolle an asynchronem PHP? Sind nicht JavaScript und Node.js von Natur aus überlegen, was eventgetriebene Architekturen angeht?
Vasily Zorin: Ich glaube, dass das eine Glaubensfrage ist. Ich persönlich halte es für keine gute Idee, serverseitig mit JavaScript zu arbeiten, weil sein OO-Modell dort nicht gut ist. Entwickler wissen, was ich meine.
PHP Magazin: phpDaemon hat bereits eine Menge Features. Wie lange hast du gebraucht und was waren deine Prioritäten dabei?
Vasily Zorin: Das Projekt begann 2008. Damals nutzte ich PHP auf die übliche Art, also mit nginx und php-fpm. Aber dann begann ich, mich zu wundern, warum PHP mit der Natur von FastCGI bricht und jeder Request komplett von vorne berechnet wird. Es war und ist ein großes Performance-Problem, also schrieb ich zunächst das phpFastCGI-Projekt. Schematisch sah das so aus:
initWorld(); for ($i = 0; $i
Ich habe für jeden Request ein neues Objekt erstellt. Nach einer Weile stellte ich mir die Frage: „Warum sollte ich nicht mehr als einen simultanen Request verarbeiten?“ Dann erstellte ich den memcached-Client und danach phpDaemon. Es nutzte socket_select() und bald darauf fügte ich die Unterstützung für Antony Dovgals pecl-libevent 1.x hinzu.
Damals unterstützte PHP noch keine anonymen Funktionen und sein OO-Modell war noch nicht so ausgereift. Aber das haben wir überlebt. Heutzutage nutzen wir libevent 2.x (die Ehre für pecl-event gebührt an dieser Stelle Ruslan Osmanov).
PHP Magazin: Auf der Projekt-Homepage werbt Ihr mit der Erweiterbarkeit von phpDaemon. Was heißt das?
Vasily Zorin: Man kann seine eigene Anwendung oder einen Netzwerk-Client oder -Server erstellen, komplett in PHP geschrieben. Man kann die Basisklassen um eigene Methoden erweitern. So kann man etwa HTTPRequest->onUploadFileStart() overloaden, um eingehende Dateien nach persönlichem Gusto hochzuladen (auf den eigenen S3-Bucket oder wohin auch immer).
PHP Magazin: Wenn das Projekt schon eine fünfjährige Geschichte hat, warum hören wir dann jetzt erst davon?
Vasily Zorin: Weil wir erst vor wenigen Monaten auf libevent 2.x gewechselt haben, und weil wir diese Woche die neue Homepage daemon.io gelauncht haben. Jetzt gibt es was zu gucken.
PHP Magazin: Was steht noch auf dem Plan für phpDaemon?
Vasily Zorin: Augenblicklich konzentrieren wir uns auf eine bessere Dokumentation und notwendige Protokolle. Darüber hinaus wollen wir Bugs schneller beseitigen und auf Feature-Requests früher reagieren. Das Ziel ist, kleine Issues innerhalb von fünf bis 15 Minuten abzuarbeiten, und für große nicht mehr als ein paar Tage zu benötigen.
PHP Magazin: Wie sieht es mit der gewerblichen Nutzung von phpDaemon aus?
Vasily Zorin: Wir haben uns für die LGPL (Lesser GNU Public License) entschieden, die im Gegensatz zur GPL gewerbliche Nutzung zulässt.
PHP Magazin: Danke für deine Zeit!