In den letzten sechs Monaten habe ich ein Gameserver-Projekt mit PHP- und Java-Technologie-Stacks abgeschlossen. Da es im Projekt hochfrequente Netzwerkanforderungen gibt, versuchte der PHP-Technologie-Stack, die Swoole-Engine (eine leistungsstarke ereignisbasierte asynchrone parallele Netzwerkkommunikations-Engine) zu verwenden, um einen Teil des Spielegeschäfts abzuschließen.
Empfohlen (kostenlos): swoole
Swoole-Installation
Die Installation von swoole ist sehr einfach. Da es sich um ein Projekt von Chinesen handelt, können viele Fragen in den offiziellen Website-Dokumenten beantwortet werden. Es gibt zwei Arten der Installation:
Klicken Sie einfach auf Baidu, um spezifische Anweisungen zu erhalten. Es gibt viele verwandte Inhalte online.
Vorteile der Swoole-Engine
Swoole-Motorprozessanalyse
Das Flussdiagramm des Swoole-Betriebs lautet wie folgt:
Der Thread oder Prozess in Swoole
Das Strukturdiagramm lautet wie folgt:
Wolle Die Engine ist in zwei Typen unterteilt: Single-Threaded-Modus und Prozessmodus. In diesem Artikel wird nur der Prozessmodus behandelt. Der spezifische Unterschied zwischen den beiden wird in der offiziellen Dokumentation erläutert.
wird verwendet, um Swoole-Kernereignisse zu verarbeiten, wie z. B. Verbindungen von Clients und lokale Kommunikationsleitungen. Es gibt mehrere Threads im Masterprozess und jeder Thread führt eine Instanz der Epol-Funktion aus. (Da der Worker-Prozess nicht vom Master-Prozess gespalten wird, kann der Worker-Prozess nach dem gewaltsamen Beenden des Master-Prozesses noch vorhanden sein.)
Swooles Hauptprozess ist ein Multithread-Programm. Es gibt eine sehr wichtige Gruppe von Threads, die als Reaktor-Threads bezeichnet werden. Es ist der Thread, der tatsächlich TCP-Verbindungen verarbeitet und Daten sendet und empfängt.
Nach dem Akzeptieren einer neuen Verbindung weist der Hauptthread von Swoole die Verbindung einem festen Reactor-Thread zu, und dieser Thread ist für die Überwachung des Sockets verantwortlich. Lesen Sie die Daten, wenn der Socket lesbar ist, führen Sie eine Protokollanalyse durch und übermitteln Sie die Anfrage an den Worker-Prozess. Wenn der Socket beschreibbar ist, werden die Daten an den TCP-Client gesendet
Die Worker-/Aufgabenprozesse in swoole werden alle vom Manager-Prozess geforkt und verwaltet.
Wenn der untergeordnete Prozess endet, ist der Managerprozess dafür verantwortlich, den untergeordneten Prozess wiederzuverwenden, um zu verhindern, dass er zu einem Zombie-Prozess wird. Und erstellen Sie neue untergeordnete Prozesse.
Wenn der Server heruntergefahren wird, sendet der Managerprozess Signale an alle untergeordneten Prozesse, um die untergeordneten Prozesse zu benachrichtigen, den Dienst zu schließen.
Wenn der Server neu geladen wird, schließt/startet der Managerprozess den untergeordneten Prozess neu durch einen
Swoole bietet einen perfekten Prozessverwaltungsmechanismus, wenn der Worker-Prozess abnormal beendet wird, z. B. bei einem schwerwiegenden PHP-Fehler, wenn er versehentlich von anderen Programmen beendet wird oder nach Erreichen der max_request-Nummer normal beendet wird. Der Hauptprozess startet den neuen Worker-Prozess neu. Code kann im Worker-Prozess wie gewöhnliches Apache+PHP oder PHP-FPM geschrieben werden. Es besteht keine Notwendigkeit, asynchronen Callback-Code wie Node.js zu schreiben.
Rückruffunktion in jedem Prozess
Rückruffunktion im Master:
Rückruffunktion im Worker-Prozess
Callback-Funktion innerhalb des TaskWorker-Prozesses
Callback-Funktion im Manager-Prozess
Die Beziehung zwischen Reactor, Worker und TaskWorker
kann als Reactor verstanden werden Ginx und Worker ist PHP -fpm. Der Reactor-Thread verarbeitet Netzwerkanfragen asynchron und parallel und leitet sie dann zur Verarbeitung an den Worker-Prozess weiter. Reaktor und Worker kommunizieren über UnixSocket.
In PHP-FPM-Anwendungen wird eine Aufgabe oft asynchron an eine Warteschlange wie Redis übermittelt und einige PHP-Prozesse werden im Hintergrund gestartet, um diese Aufgaben asynchron zu verarbeiten. Der von Swoole bereitgestellte TaskWorker ist eine umfassendere Lösung, die die Verwaltung von Aufgabenzustellung, Warteschlange und PHP-Aufgabenverarbeitungsprozessen integriert. Die asynchrone Aufgabenverarbeitung kann sehr einfach über die von der zugrunde liegenden Schicht bereitgestellte API implementiert werden. Darüber hinaus kann TaskWorker auch nach Abschluss der Aufgabenausführung ein Ergebnis an den Worker zurückgeben.
Swooles Reactor, Worker und TaskWorker können eng integriert werden, um erweiterte Nutzungsmethoden bereitzustellen. Eine beliebtere Metapher: Nehmen Sie an, dass der Swoole-Anwendungsserver eine Fabrik ist und der Reaktor ein Vertrieb ist, der Kundenaufträge entgegennimmt. Der Arbeiter ist der Arbeiter. Wenn der Verkäufer die Bestellung erhält, macht sich der Arbeiter an die Arbeit, um das zu produzieren, was der Kunde will. Der TaskWorker kann als Verwaltungspersonal verstanden werden, das dem Arbeiter bei der Erledigung einiger Aufgaben helfen kann, damit sich der Arbeiter auf die Arbeit konzentrieren kann.
Die unterste Ebene weist dem Worker-Prozess und dem TaskWorker-Prozess eine eindeutige ID zu. Verschiedene Worker- und TaskWorker-Prozesse können über die sendMessage-Schnittstelle kommunizieren.
Die Arbeitsteilung jedes Prozess-Threads im eigentlichen Projekt:
Weitere verwandte Lernempfehlungen: Swoole-Tutorial
Das obige ist der detaillierte Inhalt vonKurze Einführung in die Vermittlung der Prinzipien der Swoole-Engine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!