Heim  >  Artikel  >  Backend-Entwicklung  >  Swoole-Ereignisbehandlungsprozess

Swoole-Ereignisbehandlungsprozess

little bottle
little bottlenach vorne
2019-04-26 15:50:222505Durchsuche

Der Hauptinhalt dieses Artikels befasst sich mit der Analyse des Swoole-Ereignisverarbeitungsprozesses. Ich hoffe, dass dieser Artikel für Sie hilfreich sein kann.

Um den Swoole-Ereignisverarbeitungsprozess zu verstehen, müssen Sie zunächst die beiden Netzwerkereignisverarbeitungsmodi verstehen.

Reaktormodus

Es 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-Modus

Zwei Implementierungen

Verwenden 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:

  1. Der Hauptthread ruft die Funktion aio_read auf, um das Leseabschlussereignis auf dem Socket beim Kernel zu registrieren.
  2. Der Hauptthread verarbeitet weiterhin andere E/A-Ereignisse.
  3. Wenn die Daten am Socket in den Benutzerpuffer eingelesen werden, sendet der Kernel ein Signal an die Anwendung (logische Einheit), um die Anwendung darüber zu informieren, dass die Daten verfügbar sind.
  4. Die Anwendung liest die Daten (Client-Anfrage) und ruft nach der Verarbeitung die Funktion aio_write auf, um das Schreibereignis auf dem Socket beim Kernel zu registrieren.
  5. Der Hauptthread verarbeitet weiterhin andere Logik.
  6. Wenn die Daten im Benutzerpuffer in den Socket geschrieben werden, sendet der Kernel ein Signal an die Anwendung, um die Anwendung darüber zu informieren, dass die Daten gesendet wurden.
  7. Die Anwendung verfügt über vordefinierte Signalverarbeitungsfunktionen, um die Folgen zu bewältigen, wie z. B. das Schließen des Sockets.

Verwenden Sie das I/O-Synchronisationsmodell, um den Proactor-Modus zu implementieren. Prinzip: Der Hauptthread führt die Lese- und Schreibvorgänge für E/A-Ereignisdaten aus und die Geschäftslogikoperationen werden an die Logikeinheit übergeben. Verwenden Sie dazu beispielsweise epoll.

Workflow:

  1. Der Hauptthread registriert das Lesebereitschaftsereignis am Socket in der Epoll-Kernel-Ereignistabelle.
  2. Der Hauptthread ruft epoll_wait auf, um darauf zu warten, dass Daten auf dem Socket gelesen werden.
  3. Nach der Rückkehr von epoll_wait liest der Hauptthread Daten aus dem Socket, kapselt die gelesenen Daten dann in ein Anforderungsobjekt (Anfrage des Clients) und fügt sie in die Anforderungswarteschlange ein.
  4. Der Consumer-Thread der Warteschlange verarbeitet also das Anforderungsobjekt und registriert dann das Schreibbereitschaftsereignis am Socket in der Epoll-Kernel-Ereignistabelle.
  5. Der Hauptthread ruft epoll_wait auf, um darauf zu warten, dass der Socket beschreibbar ist.
  6. Wenn der Socket beschreibbar ist, benachrichtigt epoll_wait den Hauptthread. Der Hauptthread schreibt das Anfrageergebnis in den Socket.

Swoole-Ereignisarchitekturdiagramm

Wie aus der Abbildung ersichtlich ist, werden sie berücksichtigt, wenn wir den Reaktor-Thread und den Arbeitsprozess kombinieren Als 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).

Verwandte Tutorials: Swoole-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSwoole-Ereignisbehandlungsprozess. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen