Der Inhalt dieses Artikels befasst sich mit der Architekturanalyse von Swoole. Er hat einen gewissen Referenzwert. Ich hoffe, dass er für Sie hilfreich ist.
Das Strukturdiagramm sieht wie folgt aus:
Swoole wird hauptsächlich vom Master-Prozess (Hauptprozess) und dem Manager-Prozess zur Vervollständigung verwendet Funktionen.
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.
verwaltet Arbeiter-/Aufgabenprozesse. Die Worker-/Aufgabenprozesse werden alle vom Manager-Prozess geforkt und verwaltet.
Nach dem Akzeptieren einer neuen Verbindung weist der Hauptthread (Master-Prozess) 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.
ist verantwortlich für die Aufrechterhaltung der Client-TCP
-Verbindungen, die Verarbeitung des Netzwerks IO
, die Verarbeitung von Protokollen, das Senden und Empfangen von Daten
ist vollständig asynchroner, nicht blockierender Modus
besteht ausschließlich aus C
Code, mit Ausnahme von Start
/Shudown
Ereignisrückrufen wird kein PHP-Code ausgeführt
Puffern, spleißen und teilen Sie die vom TCP
Client gesendeten Daten in ein vollständiges Anforderungspaket auf.
Reactor
Auf Multithread-Weise ausführen
ähnelt dem PHP-FPM-Prozess.
Akzeptiert das vom Reactor
-Thread übermittelte Anforderungspaket und führt die PHP
Rückruffunktion aus, um die Daten zu verarbeiten.
erzeugt eine Antwort Daten und sendet sie an den Reactor
Thread, der vom Reactor
Thread an den TCP
Client gesendet wird
kann im asynchronen Modus oder im synchronen Modus
Im Multiprozessmodus ausführenWorker
-Prozess über die Worker
-Methode gelieferte Aufgabe swoole_server->task/taskwait
) sorgt dafür, dass der swoole_server->finish
Prozess Worker
in einer Mehrprozessweise ausgeführt wird TaskWorker
Reactor
ist, nginx
ist Worker
. Der php-fpm
-Thread verarbeitet die Netzwerkanforderung asynchron und parallel und leitet sie dann zur Verarbeitung an den Reactor
-Prozess weiter (verarbeitet in der Rückruffunktion). Die Kommunikation zwischen Worker
und Reactor
erfolgt über Worker
. UnixSocket
Ereignisverarbeitungsprozess
Um den Swoole-Ereignisverarbeitungsprozess zu verstehen, verstehen Sie zunächst die beiden Netzwerkereignisverarbeitungsmodi. ReaktormodusEs erfordert, dass der Hauptthread (E/A-Verarbeitungseinheit) nur überwacht, ob ein Ereignis im Dateideskriptor auftritt, und wenn ja, den Arbeitsthread/-prozess sofort darüber benachrichtigt das Ereignis (logische Einheit). Ansonsten erledigt der Hauptthread keine andere Arbeit. Das Lesen und Schreiben von Daten, das Annehmen neuer Verbindungen und die Bearbeitung von Kundenanfragen erfolgen allesamt in Worker-Threads. Proactor-ModusZwei ImplementierungenVerwenden Sie das asynchrone E/A-Modell, um den Proactor-Modus zu implementieren. Prinzip: Alle E/A-Operationen werden an den Hauptthread übergeben, der mit dem Kernel zusammenarbeitet, um sie zu verarbeiten, und Geschäftslogikoperationen werden an die Logikeinheit übergeben. Verwenden Sie dazu beispielsweise aio_read. Workflow:Dann verarbeitet der Verbraucherthread der Warteschlange das Anforderungsobjekt und registriert dann das Schreibbereitschaftsereignis am Socket in der Epoll-Kernel-Ereignistabelle.
Der Hauptthread ruft epoll_wait auf, um darauf zu warten, dass der Socket beschreibbar ist.
Wenn der Socket beschreibbar ist, benachrichtigt epoll_wait den Hauptthread. Der Hauptthread schreibt das Anfrageergebnis in den Socket.
Wie aus der Abbildung ersichtlich ist, wenn wir den Reaktor-Thread und den Arbeitsprozess kombinieren, Es kann wie folgt angesehen werden: Für Arbeitsthreads verwendet Swoole den Reaktorereignisverarbeitungsmodus.
Die Schritte, die eine Anfrage durchläuft, sind wie folgt:
1. Der Server-Hauptthread wartet darauf, dass der Client eine Verbindung herstellt.
2. Der Reactor-Thread verarbeitet den verbundenen Socket, liest die Anfragedaten auf dem Socket (Receive), kapselt die Anfrage und liefert sie an den Arbeitsprozess.
3. Der Arbeitsprozess ist eine logische Einheit, die Geschäftsdaten verarbeitet.
4. Das Ergebnis des Arbeitsprozesses wird an den Reactor-Thread zurückgegeben.
5. Der Reactor-Thread schreibt das Ergebnis zurück in den Socket (Senden).
Bitte lesen Sie die obige strukturelle Einführung für die Arbeit jedes Moduls.
Verwandte Empfehlungen:
Wie passe ich ein Modell an? Verwendung des benutzerdefinierten ThinkPHP3.2-Basisklassenmodells
So verwenden Sie PHP, um den Inhalt von Excel-Dateien zu lesen und Zelldaten zu erhalten
Das obige ist der detaillierte Inhalt vonArchitekturanalyse von Swoole. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!