Eigenschaften von Workerman

1. Pure PHP-Entwicklung

Anwendungen, die mit Workerman entwickelt wurden, können unabhängig von php-fpm, apache und nginx betrieben werden. Dies macht es PHP-Entwicklern leicht, Anwendungen zu entwickeln, bereitzustellen und zu debuggen.

2. Unterstützung von PHP-Multiprocessing

Um die Leistung mehrerer CPUs auf einem Server voll auszuschöpfen, unterstützt Workerman standardmäßig Multiple Prozesse und Aufgaben. Workerman startet einen Hauptprozess und mehrere Unterprozesse, um Dienste anzubieten. Der Hauptprozess überwacht die Unterprozesse, während die Unterprozesse eigenständig Netzwerkverbindungen überwachen und Daten empfangen, senden und verarbeiten. Das einfache Prozessmodell macht Workerman stabiler und effizienter.

3. Unterstützung von TCP und UDP

Workerman unterstützt die beiden Transportprotokolle TCP und UDP. Es ist lediglich erforderlich, eine Eigenschaft zu ändern, um das Transportprotokoll zu wechseln, ohne dass der Anwendungscode angepasst werden muss.

4. Unterstützung von Langzeitverbindungen

Oft erfordert es, dass PHP-Anwendungen eine Langzeitverbindung mit dem Client aufrechterhalten, wie beispielsweise in Chatrooms oder Spielen. Traditionelle PHP-Container (apache, nginx, php-fpm) haben große Schwierigkeiten dabei. Mit Workerman kann, solange die Serveranwendung die Verbindung nicht aktiv schließt, eine PHP-Langzeitverbindung genutzt werden. Ein einzelner Prozess von Workerman kann Zehntausende gleichzeitige Verbindungen unterstützen, während mehrere Prozesse Hunderte Tausende oder sogar Millionen gleichzeitige Verbindungen verwalten können.

5. Unterstützung verschiedener Anwendungsprotokolle

Die Schnittstelle von Workerman unterstützt verschiedene Anwendungsprotokolle, einschließlich benutzerdefinierter Protokolle. Der Wechsel des Protokolls in Workerman ist ebenfalls sehr einfach; es muss nur ein Feld konfiguriert werden, das Protokoll wechselt automatisch, und der Anwendungscode bleibt unverändert. Sogar mehrere Ports für unterschiedliche Protokolle können geöffnet werden, um verschiedenen Anforderungen der Clients gerecht zu werden.

6. Unterstützung von Hochkonkurrenz

Workerman unterstützt die Libevent-Ereignisschleifenbibliothek (erfordert die Installation der event-Erweiterung). Die Verwendung von Event zeigt bei Langzeitverbindungen mit hoher Konkurrenz hervorragende Leistungen. Wenn die Event-Erweiterung nicht installiert ist, werden die eingebauten PHP-Select-Systemaufrufe verwendet, die ebenfalls eine sehr starke Leistung bieten.

7. Unterstützung für sanfter Dienstneustart

Wenn ein Dienst neu gestartet werden muss (zum Beispiel beim Release einer neuen Version), möchten wir nicht, dass die Prozesse, die Benutzeranfragen bearbeiten, sofort beendet werden, noch wollen wir, dass der Neustart den Kommunikationsfehler mit dem Client verursacht. Workerman bietet eine Funktion für sanften Neustart, die eine reibungslose Aktualisierung des Dienstes gewährleistet, ohne die Nutzung durch den Client zu beeinträchtigen.

8. Unterstützung für Dateiaktualisierungsüberwachung und automatisches Laden

Während der Entwicklung wünschen wir uns, dass Änderungen im Code sofort wirksam werden, um die Ergebnisse zu überprüfen. Workerman bietet das FileMonitor-Dateiüberwachungsmodul, das automatisch reload ausführt, wenn eine Datei aktualisiert wird, um die neuen Dateien zu laden und wirksam zu machen.

9. Unterstützung des Betriebs von Unterprozessen mit angegebenem Benutzer

Da Unterprozesse die Anforderungen der Benutzer tatsächlich verarbeiten, sollten sie aus Sicherheitsgründen nicht zu hohe Berechtigungen haben. Daher unterstützt Workerman die Festlegung des Benutzers, unter dem die Unterprozesse ausgeführt werden, was die Sicherheit des Servers erhöht.

10. Unterstützung für dauerhaft verfügbare Objekte oder Ressourcen

Während des Betriebs lädt Workerman die PHP-Dateien nur einmal in den Arbeitsspeicher, wodurch Klassendeklarationen, Funktionsdeklarationen, die PHP-Ausführungsumgebung, das Symboltabelle und andere nicht wiederholt erstellt und zerstört werden. Dies ist völlig anders als das PHP-Mechanismus in Webcontainern. In Workerman bleiben statische Mitglieder oder globale Variablen während des gesamten Lebenszyklus eines Prozesses bestehen, es sei denn, sie werden aktiv zerstört. Das bedeutet, dass Objekte oder Verbindungen in globalen Variablen oder Klassensatzzugriffsmitgliedern für alle Anfragen im gesamten Lebenszyklus des aktuellen Prozesses wiederverwendet werden können. Zum Beispiel kann, solange die Datenbankverbindung innerhalb eines einzelnen Prozesses einmal initialisiert wird, jede Anfrage dieses Prozesses diese Datenbankverbindung wiederverwenden, wodurch die zeitaufwändigen Prozesse wie das dreifache TCP-Handschlag, die Datenbankberechtigungsüberprüfung und das vierfache TCP-Handschlag beim Trennen der Verbindung vermieden werden, was die Effizienz der Anwendung erheblich steigert.

11. Hohe Leistung

Da PHP-Dateien nach dem einmaligen Lesen und Parsen von der Festplatte im Arbeitsspeicher verbleiben, wird beim nächsten Aufruf direkt der im Arbeitsspeicher befindliche Opcode verwendet. Dies reduziert erheblich die Festplatten-I/O und die zeitaufwändigen Prozesse wie die Initialisierung von PHP-Anfragen, die Erstellung der Ausführungsumgebung, die lexikalische und syntaktische Analyse, die Kompilierung von Opcode sowie das Schließen von Anfragen. Außerdem ist es nicht auf Container wie nginx oder apache angewiesen, was die Kommunikationskosten zwischen Containern wie nginx und PHP verringert. Das Wichtigste ist, dass Ressourcen dauerhaft bereitgestellt werden, sodass beispielsweise die Datenbankverbindung nicht jedes Mal neu initialisiert werden muss. Daher ist die Leistung von Anwendungen, die mit Workerman entwickelt werden, sehr hoch.

12. Unterstützung von HHVM

Unterstützt das Ausführen auf der HHVM-VM, was die PHP-Leistung erheblich steigern kann. Besonders in rechenintensiven Anwendungen zeigt es hervorragende Leistungen. Vergleichstests zeigen, dass Workerman in der HHVM-Umgebung unter keinen Lastanwendungen eine Netzwerkauslastung von 30-80% im Vergleich zur Ausführung unter Zend PHP5.6 erhöht.

13. Unterstützung für verteilte Bereitstellung

14. Unterstützung für den Daemon-Modus

15. Unterstützung für das Hören auf mehreren Ports

16. Unterstützung für die Umleitung von Standard-Eingabe und -Ausgabe