Heim  >  Artikel  >  PHP-Framework  >  Organisieren Sie Swoole-Wissenspunkte im Detail (Zusammenfassungsfreigabe).

Organisieren Sie Swoole-Wissenspunkte im Detail (Zusammenfassungsfreigabe).

WBOY
WBOYnach vorne
2022-02-28 18:13:523400Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über Swoole, einschließlich der Anforderung von Fastcgi an den Swoole-Masterprozess zur Verteilung an untergeordnete Prozesse, aber es wird nicht wie der untergeordnete PHP-FPM-Prozess sein, der nach der Verwendung beendet wird, und andere damit zusammenhängende Probleme Jeder ist hilfsbereit.

Organisieren Sie Swoole-Wissenspunkte im Detail (Zusammenfassungsfreigabe).

Empfohlenes Lernen: swoole-Video-Tutorial

swooleErklärung des Chatroom-Prozesses

Der gesamte Chatroom-Prozess ist:

- Anmeldung des Benutzers über die http-Schnittstelle, um eine Autorisierung zu erhalten

- Rufen Sie die Freundesliste, die letzte ungelesene Nachricht verschiedener Freunde und die Anzahl der ungelesenen Nachrichten (für die Homepage-Anzeige) über die Autorisierungsanfrage-http-Schnittstelle ab ?? Mechanismus zum Trennen und erneuten Verbinden: Wenn das Schließereignis ausgelöst wird, stellen Sie die Verbindung zu ws wieder her ws-Schnittstelle, der Client verarbeitet sie und schiebt sie in die Benachrichtigungsleiste usw.

- Neue Nachrichten-Push empfangen und in der Nachrichtenliste anzeigen

- Wenn Sie darauf klicken eine Gruppen-/Freund-Nachrichtenschnittstelle, die automatisch die neuesten n Nachrichten abruft und weiterhin n Nachrichten erhält, wenn der Benutzer aufruft

Betrieb im laufenden Modus

CGI-Protokollmodus

Gemeinsame Gateway-Schnittstelle im CGI-Modus, die es Webservern ermöglicht, über bestimmte Protokolle mit Anwendungen zu kommunizieren. Das Aufrufprinzip lautet ungefähr:

Benutzeranforderung – Webserver empfängt Anforderung – untergeordneter Fork-Prozess

Programm aufrufen/Programm ausführen->Das Programm gibt den Inhalt zurück/Der Programmaufruf endet->Der Webserver empfängt den Inhalt->Zurück an den Benutzer

Da jede Benutzeranforderung gegabelt werden muss, um einen Prozess zu erstellen, rufen Sie das Programm einmal auf und zerstören Sie dann den Prozess, sodass die Leistung gering ist

Fast-CGI-Protokollmodus

Fast-CGI ist eine aktualisierte Version des CGI-Modus. Solange er aktiviert ist, kann er immer Anfragen verarbeiten Der Prozess muss beendet werden. Das Aufrufprinzip lautet ungefähr:

Initialisierung des Fast-CGI-Prozessmanagers des Webservers –>Fork n Prozesse im Voraus

Benutzeranfrage –>Webserver empfängt die Anfrage –>übergibt sie an den Fast-CGI-Prozessmanager –>Fast-CGI-Prozessverwaltungsbereich empfängt sie und gibt sie an einen der inaktiven Fast-CGI-Prozesse weiter Verarbeitung –>Verarbeitung abgeschlossen, Der Fast-CGI-Prozess wird inaktiv und wartet auf die nächste Anfrage –> Der Webserver empfängt den Inhalt –>

Apache+php-Laufzeit: Standardmäßig wird der Modulmodus verwendet, der PHP als Apache-Modul startet, wenn eine Benutzeranfrage empfangen wird, indem das Modul mod_php aufgerufen wird gefunden auf Baidu

php-cli-Modus

php-cli-Modus gehört zum Befehlszeilenmodus. Für viele Entwickler, die gerade mit dem Erlernen von PHP begonnen haben, ist dies der unbekannteste Betriebsmodus wamp und wnmpDieser Modus funktioniert nicht. Sie müssen andere Programme verwenden, um php xx.php direkt einzugeben und den PHP-Code auszuführen

Der offensichtliche Unterschied zwischen dem Befehlszeilenmodus und dem regulären Webmodus ist:

* Es gibt keine Timeout-Periode

  • * Puffer ist standardmäßig deaktiviert

  • * Verwendung von STDIN und STDOUT Standard-Eingabe/Ausgabe/ Fehler

  • * echo var_dump, phpinfo und andere Ausgaben werden direkt an die Konsole ausgegeben

  • * Verschiedene Klassen/Funktionen, die verwendet werden können

  • * Verschiedenes PHP .ini-Konfigurationen

  • php-fpm

  • PHP- FPM (FastCGI Process Manager) wird verwendet, um die meisten zusätzlichen Funktionen von PHP FastCGI zu ersetzen und ist sehr nützlich für Websites mit hoher Auslastung.

Zu seinen Funktionen gehören:Erweiterte Prozessmanagementfunktionen, die einen reibungslosen Stopp/Start unterstützen;

Kann in verschiedenen UID-/GID-/Chroot-Umgebungen arbeiten, unterschiedliche Ports abhören und unterschiedliche php.ini-Konfigurationsdateien verwenden (kann die Einstellung „safe_mode“ ersetzen);
  • stdout- und stderr-Protokollierung;
  • Seien Sie in der Lage, beschädigte Opcodes neu zu starten und zwischenzuspeichern, wenn unerwartete Situationen auftreten;
  • Unterstützung für die Optimierung des Datei-Uploads;
  • „Slow Log“ – zeichnet ungewöhnliche Langsamkeit auf, die durch die Ausführung des Skripts verursacht wird (zeichnet nicht nur den Dateinamen, sondern auch die PHP-Backtrace-Informationen auf; Sie können ptrace oder ähnliche Tools verwenden, um die laufenden Daten zu lesen und zu analysieren des Remote-Prozesses);
  • fastcgi_finish_request() – Sonderfunktion: Wird verwendet, um zeitaufwändige Arbeiten im Hintergrund fortzusetzen (Konvertierung von Videoeingaben, statistische Verarbeitung usw.), nachdem die Anfrage abgeschlossen und die Daten aktualisiert wurden
  • Dynamische/statische Unterprozessgenerierung;
  • Grundlegende SAPI-Laufstatusinformationen (ähnlich dem mod_status von Apache);
  • Basierend auf der Konfigurationsdatei php.ini.
  • ... Aufgaben

    Benutzeranfrage->Der Webserver empfängt die Anfrage->Die Anfrage wird an php-fpm weitergeleitet->php-fpm wird an einen inaktiven Prozess zur Verarbeitung übergeben
  • ->Die Prozessverarbeitung ist abgeschlossen ->php-fpm kehrt zum Webserver zurück. -> Der Webserver empfängt Daten Austausch in Computernetzwerken, alle Computer/Mobiltelefone. Die Kommunikation mit anderen Netzwerkgeräten muss Netzwerkprotokollen folgen.

    Das Netzwerkprotokoll ist entsprechend den Kommunikationsschritten in 7 Ebenen unterteilt:

    • Anwendungsschicht

    • Präsentationsebene

    • Sitzungsschicht

    • Transportschicht

    • Netzwerkschicht

    • Datenverbindungsschicht

    • Physikalische Schicht Das IP-Protokoll (Netzwerkschicht) ist das Grundprotokoll des Internets und derzeit das beliebteste Netzwerk

    Geltungsbereich

    Die Verantwortung von IP besteht darin, Daten von der Quelle zum Ziel zu übertragen. Es ist nicht verantwortlich für die Gewährleistung der Zustellungszuverlässigkeit, der Flusskontrolle, der Paketreihenfolge und anderer Dienste, die bei Host-to-Host-Protokollen üblich sind. Dieses Protokoll wird vom Host-to-Host-Protokoll aufgerufen und ist dafür verantwortlich, das lokale Netzwerkprotokoll aufzurufen, um das Datenpaket an das nächste Gateway oder den nächsten Zielhost zu übertragen. Beispielsweise kann TCP das IP-Protokoll aufrufen, beim Aufrufen von IP die Zieladresse und die Quelladresse als Parameter übergeben und die lokale Netzwerkschnittstelle (Protokoll) aufrufen, um das Datenpaket zu übertragen.

    Betrieb

    IP implementiert zwei Grundfunktionen: Adressierung und Segmentierung. IP kann das Datenpaket entsprechend der im Datenpaket-Header enthaltenen Zieladresse übertragen. In diesem Prozess ist IP für die Auswahl des Übertragungspfads verantwortlich. Diese Pfadauswahl wird als Routing-Funktion bezeichnet. Können einige Netzwerke nur kleine Datenpakete übertragen, kann IP die Datenpakete wieder zusammensetzen und dies im Header-Feld anzeigen. Diese Grundfunktionen sind im IP-Modul enthalten, das auf jedem Host und Gateway im Netzwerk vorhanden ist, und diese Module (insbesondere auf dem Gateway) verfügen über Routing- und andere Servicefunktionen. Bei IP gibt es keine Verbindung zwischen Datenpaketen und es ist schwierig, etwas über Verbindungen oder logische Verknüpfungen bei IP zu sagen.

    IP nutzt vier Schlüsseltechnologien zur Bereitstellung von Diensten: Diensttyp, Lebensdauer, Optionen und Header-Prüfcode. Der Servicetyp bezieht sich auf die erwartete Servicequalität. Ein Diensttyp ist eine Reihe von Parametern, die die Dienste darstellen, die das Internet bereitstellen kann. Dieser Diensttyp wird von Gateways verwendet, um die tatsächlichen Zustellungsparameter in einem bestimmten Netzwerk oder im nächsten Netzwerk, das durchgelassen wird, oder dem nächsten Gateway, das dieses Paket weiterleitet, auszuwählen. Die Lebensdauer ist die Obergrenze dafür, wie lange ein Paket leben kann. Es wird vom Absender festgelegt und von der Route verarbeitet. Wenn die Time-to-Live bei Nichtankunft Null ist, verwerfen Sie das Paket. Die Option ist für Steuerfunktionen wichtig, für die normale Kommunikation ist ihr Vorhandensein jedoch nicht erforderlich. Zu den Optionen gehören Zeitstempel, Sicherheit und spezielles Routing. Der Header-Prüfcode stellt die korrekte Übertragung der Daten sicher. Schlägt die Prüfung fehl, wird das gesamte Datenpaket verworfen.

    IP-Adresse

    Bei der Übertragung von Daten von der Quelle zum Ziel benötigen Sie eine IP-Adresse, um sie zu übertragen. Jetzt werden IP-Adressen in IPv4- und IPv6-Adressen unterteilt Am gebräuchlichsten ist die IPv4-Adresse, z. B. 127.0.0.1 (lokale Adresse) 119.75.217.109 (Baidu-IP). Die IP-Übertragung muss eine eindeutige IP-Adresse haben, bevor Daten gesendet werden können

    tcp (Transport Layer)

    TCP (Transmission Control Protocol) ist ein verbindungsorientiertes, zuverlässiges, Bytestrom-basiertes Transportschicht-Kommunikationsprotokoll, spezifiziert durch die RFC 793-Definition der IETF. Im vereinfachten OSI-Modell von Computernetzwerken vervollständigt es die von der vierten Schicht angegebenen Funktionen. Das User Datagram Protocol (UDP) ist ein weiteres wichtiges Transportprotokoll innerhalb derselben Schicht. In der Internetprotokoll-Suite ist die TCP-Schicht eine Zwischenschicht, die über der IP-Schicht und unterhalb der Anwendungsschicht liegt. Zwischen Anwendungsschichten verschiedener Hosts sind häufig zuverlässige, rohrförmige Verbindungen erforderlich, die IP-Schicht stellt jedoch keinen solchen Flussmechanismus bereit, sondern sorgt für eine unzuverlässige Paketvermittlung.

    Die Anwendungsschicht sendet einen Datenstrom, der durch 8-Bit-Bytes dargestellt wird, zur Übertragung zwischen Netzwerken an die TCP-Schicht, und dann teilt TCP den Datenstrom in Nachrichtensegmente geeigneter Länge (normalerweise durch den Computer verbunden) auf ) Die maximale Übertragungseinheit (MTU)-Grenze der Datenverbindungsschicht des Netzwerks. Anschließend leitet TCP das resultierende Paket an die IP-Schicht weiter, die das Paket über das Netzwerk an die TCP-Schicht der empfangenden Entität weiterleitet. Um sicherzustellen, dass es nicht zu Paketverlusten kommt, gibt TCP jedem Paket eine Sequenznummer. Gleichzeitig stellt die Sequenznummer sicher, dass die an die empfangende Endeinheit übertragenen Pakete der Reihe nach empfangen werden. Die empfangende Entität sendet dann eine entsprechende Bestätigung (ACK) für das erfolgreich empfangene Paket zurück. Wenn die sendende Entität innerhalb einer angemessenen Umlaufverzögerung (RTT) keine Bestätigung erhält, wird davon ausgegangen, dass das entsprechende Datenpaket verloren gegangen ist wird erneut übertragen. TCP verwendet eine Prüfsummenfunktion, um zu prüfen, ob die Daten fehlerhaft sind. Sowohl beim Senden als auch beim Empfang werden Prüfsummen berechnet.

    Drei-Wege-Handshake

    TCP ist das Transportschichtprotokoll im Internet, das das Drei-Wege-Handshake-Protokoll zum Herstellen einer Verbindung verwendet. Wenn die aktive Partei eine SYN-Verbindungsanforderung sendet, wartet sie darauf, dass die andere Partei mit SYN+ACK antwortet, und führt schließlich eine ACK-Bestätigung für die SYN der anderen Partei durch. Diese Methode zum Herstellen einer Verbindung kann fehlerhafte Verbindungen verhindern. Das von TCP verwendete Flusskontrollprotokoll ist ein Sliding-Window-Protokoll mit variabler Größe. Der Prozess des TCP-Drei-Wege-Handshakes ist wie folgt:

    • Der Client sendet eine SYN-Nachricht (SEQ = x) an den Server und wechselt in den Status SYN_SEND.

    • Der Server empfängt die SYN-Nachricht, antwortet mit einer SYN (SEQ=y) ACK (ACK=x+1)-Nachricht und wechselt in den SYN_RECV-Status.

    • Der Client empfängt die SYN-Nachricht vom Server, antwortet mit einer ACK-Nachricht (ACK=y+1) und wechselt in den etablierten Status.

    Die Verbindung ist erfolgreich

    Nachdem die Verbindung erfolgreich ist, können beide Parteien jederzeit Byteströme aneinander übertragen und die Verbindung schließen. Die übertragenen Daten haben Folgendes Eigenschaften

    • Die übertragenen Daten werden von TCP in zum Senden am besten geeignete Datenblöcke unterteilt und an das IP-Protokoll übergeben. Diese gesendeten Daten werden als Nachrichtensegment oder Segment bezeichnet

    • tcp ist eine zuverlässige Verbindung. Jedes Mal, wenn ein Datensegment gesendet wird, wird eine Bestätigung gesendet. Die Daten werden erneut gesendet

    • TCP speichert eine Prüfsumme seines Headers und seiner Daten. Hierbei handelt es sich um eine End-to-End-Prüfsumme, mit der etwaige Änderungen der Daten während der Übertragung erkannt werden sollen. Wenn in der Prüfsumme eines empfangenen Segments ein Fehler auftritt, verwirft TCP das Segment und bestätigt den Empfang des Segments nicht (in der Hoffnung, dass der Absender eine Zeitüberschreitung erfährt und erneut sendet).

    • Zwei Anwendungen tauschen über eine TCP-Verbindung einen Bytestrom aus 8-Bit-Bytes aus. TCP fügt keine Datensatzkennungen in den Bytestream ein. Wir nennen diesen Bytestream-Dienst. Wenn die Anwendung einer Partei zuerst 10 Bytes, dann 20 Bytes und dann 50 Bytes überträgt, kann die andere Partei der Verbindung nicht nachvollziehen, wie viele Bytes der Absender jedes Mal gesendet hat. Solange der eigene Empfangspuffer nicht voll ist, empfängt der TCP-Empfänger so viele, wie er empfangen kann. Ein Ende leitet einen Bytestrom an eine TCP-Verbindung weiter, und derselbe Bytestrom wird am anderen Ende der TCP-Verbindung angezeigt.

    Vier Wellen

    Der Verbindungsaufbau erfordert drei Handshakes und der Verbindungsabbau erfordert vier Wellen, was durch TCPs Half-Close verursacht wird. Der spezifische Prozess ist wie folgt.

    • Ein Anwendungsprozess ruft zunächst den Abschluss auf, der als „aktiver Abschluss“ bezeichnet wird. Der TCP auf dieser Seite sendet dann ein FIN-Segment, um anzuzeigen, dass die Daten gesendet wurden.

    • Der Peer, der diese FIN empfängt, führt einen „passiven Abschluss“ (passives Schließen) durch und diese FIN wird von TCP bestätigt.

    • Hinweis: Der Empfang von FIN wird auch als End-of-File an den empfangenden Bewerbungsprozess weitergeleitet und nach allen anderen Daten platziert, die für den Empfang durch den Bewerbungsprozess in der Warteschlange stehen, da der Empfang von FIN bedeutet, dass die Der empfangende Bewerbungsprozess hat auf der entsprechenden Verbindung keine weiteren Daten zu empfangen.

    • Nach einer Weile ruft der Anwendungsprozess, der dieses Dateiendezeichen empfängt, close auf, um seinen Socket zu schließen. Dies führt dazu, dass sein TCP ebenfalls eine FIN sendet.

    • Der ursprüngliche sendende TCP, der diese endgültige FIN empfängt (d. h. die Seite, die das aktive Herunterfahren durchführt), bestätigt diese FIN. Da für jede Richtung ein FIN und ein ACK erforderlich sind, sind normalerweise 4 Segmente erforderlich.

    „Normalerweise“ bedeutet, dass in einigen Fällen die FIN von Schritt 1 zusammen mit den Daten gesendet wird. Darüber hinaus stammen die in den Schritten 2 und 3 gesendeten Abschnitte von dem Ende, das das passive Herunterfahren durchführt, und möglicherweise auch in Abschnitt A zusammengefasst. Zwischen den Schritten 2 und 3 ist es möglich, Daten von der Seite, die das passive Herunterfahren durchführt, zu der Seite zu fließen, die das aktive Herunterfahren durchführt. Dies wird als „halbes Schließen“ bezeichnet. Wenn ein Unix-Prozess beendet wird, entweder freiwillig (Aufruf von Exit oder Rückkehr von der Hauptfunktion) oder unfreiwillig (Empfang eines Signals, das den Prozess beendet), werden alle offenen Deskriptoren geschlossen, was auch dazu führt, dass alle TCPs noch offen sind. Außerdem wird eine FIN ausgegeben die Verbindung. Sowohl der Client als auch der Server können ein aktives Herunterfahren durchführen. Normalerweise führt der Client ein aktives Herunterfahren durch, aber bei einigen Protokollen, wie etwa HTTP/1.0, führt der Server ein aktives Herunterfahren durch.

    Der TCP in PHP

    php kann die Socket-Funktion, die Swoole-Erweiterung und die Stream-Funktion verwenden, um einen Socket des TCP-Protokolls zu erstellen, den Netzwerkkarten-Port zu binden und einen TCP-Server auszuführen /client-Operationen In PHP müssen wir den TCP-Handshake/das Winken nicht verstehen, wir müssen nur wissen, dass ip:port einen TCP-Server/-Client verbinden/erstellen kann

    Mit dem PHP-Socket können wir Zeichenfolgen direkt senden und empfangen ist auch ein String, alles andere ist Sprache und was das Betriebssystem tun muss

    Wir müssen uns nur um die Integrität des Strings kümmern

    • Nach der Clientverbindung erfolgreich war, schickte eine Zeichenfolge „easyswoole ist ein sehr gutes Swoole-Framework“

    • Der Server empfängt jedes Mal nur 9 Bytes, sodass bei der ersten Erfassung nur die unvollständige Zeichenfolge „easyswool“ empfangen wird und Sie weiterhin Daten abrufen müssen

    http-Protokoll

    Prozessanalyse

    httpDer Ablauf einer Anfrage ist ungefähr wie folgt:

    • Die Benutzereingaben im Browser www.easyswoole.com

    • DNS-Serveranalyse/oder Vergleich lokaler Hosts, Router-Hosts, um IP zu erhalten

    • Wenn der Browser auf den Standardport 80 zugreift, lautet die aufgerufene TCP-Adresse ip:80

    • TCP-Protokoll 3-Wege-Handshake zum Herstellen einer Verbindung

    • Senden Sie einen HTTP-Anfrage-Anfrage-Header

    • Der Server erhält den Anforderungsheader der HTTP-Anforderung, der angibt, dass es sich um einen HTTP-Zugriff handelt, analysiert den HTTP-Anforderungsheader, erhält den Anforderungstyp, das Anforderungsformat und die Anforderungsdaten (Cookie, Get, Post-Daten)

    • Der Server sendet Antwortdaten und trennt aktiv die Verbindung

    • Der Browser empfängt die Antwortdaten, analysiert den Antworttexttyp, analysiert die Daten und trennt die Verbindung

      Im https-Protokoll gibt es eine zusätzliche Schicht von TLS- und SSL-Verschlüsselungs- und Entschlüsselungsprotokollen in der Anfrage und Antwort. Der Standardport hat sich von 80 auf 443 geändert

    http in PHPer

    Da PHP hauptsächlich für Webserver verwendet wird, ist das Protokoll, dem PHP-Entwickler am meisten ausgesetzt sind, das http-Protokoll, das auf dem TCP/IP-Protokoll basiert

    Unter anderem PHP-Nachwuchsprogrammierer kennen das http-Protokoll nicht im Detail, können aber das f12->Netzwerk des Browsers verwenden, um die spezifischen Anforderungsheader des http-Protokolls und die vom Server gesendeten Antwortheader anzuzeigen

    WebSocket Protokoll

    generiert Hintergrund

    Vor dem WebSocket-Protokoll konnte ein Chatroom auf einer Webseite nur Ajax verwenden, um kontinuierlich abzufragen und anzufragen, ob der Server über Daten verfügt wird generiert, und eine solche Implementierungsmethode verursacht eine Reihe von Problemen:

    • Wenn das Abfrageintervall zu kurz ist, führt dies dazu, dass Client und Server innerhalb eines bestimmten Zeitraums kontinuierlich http-TCP-Handshakes durchführen / Wellenbewegungen und die Übertragung von HTTP-Anforderungsheadern und Antwortheadern verbrauchen viele Serverressourcen. Bei einer großen Anzahl von Benutzern ist der Server ausgelastet und es kommt sogar zu Ausfallzeiten

    • Der Client kann nur herausfinden, ob der Server Daten zur Rückgabe hat, indem er jedes Mal eine HTTP-Anfrage sendet, und die Aktualität der Daten kann nicht garantiert werden

    Aufgrund dieser Situation ist nur ein HTTP-Handshake erforderlich, um eine lange Verbindung aufrechtzuerhalten, sodass der Server aktiv Nachrichten an den Client senden kann, wodurch sich die Anzahl der Runden erheblich verringert Abfragemechanismus

    Implementierungsprinzip

    Beim Implementieren einer WebSocket-Verbindung muss eine WebSocket-Verbindungsanforderung über den Browser ausgegeben werden, und dann sendet der Server eine Antwort wird üblicherweise „Handshake“ genannt

    .

    In der WebSocket-API müssen der Browser und der Server nur eine Handshake-Aktion ausführen, und dann wird ein schneller Kanal zwischen dem Browser und dem Server gebildet.

    Die beiden können Daten direkt aneinander übermitteln. In diesem WebSocket-Protokoll bringt es uns zwei große Vorteile, Echtzeitdienste zu erreichen:

    • Header: Der Header, der miteinander kommuniziert, ist sehr klein – nur etwa 2 Bytes

    • Server Push: Server Push, der Server empfängt die Anfrage des Browsers nicht mehr passiv, bevor er Daten zurückgibt, sondern schiebt sie aktiv an den Browser, wenn neue Daten vorliegen.

    udp (Transportschicht)

    UDP ist die Abkürzung für User Datagram Protocol. Der chinesische Name ist User Datagram Protocol, was OSI (Open System Interconnection, Open System Interconnection) ist. Referenz Ein verbindungsloses Transportschichtprotokoll im Modell, das einfache und unzuverlässige transaktionsorientierte Informationsübertragungsdienste bereitstellt. IETF RFC 768 ist die formale Spezifikation von UDP. Die Protokollnummer von UDP in IP-Paketen beträgt 17.

    Der vollständige Name des UDP-Protokolls ist User Datagram Protocol. Im Netzwerk wird es zur Verarbeitung von Datenpaketen wie das TCP-Protokoll verwendet. Im OSI-Modell ist die vierte Schicht – die Transportschicht – die obere Schicht des IP-Protokolls. UDP hat den Nachteil, dass es keine Gruppierung und Zusammenstellung von Datenpaketen ermöglicht und Datenpakete nicht sortieren kann. Das heißt, nach dem Senden einer Nachricht ist es unmöglich zu wissen, ob sie sicher und vollständig angekommen ist. UDP wird zur Unterstützung von Netzwerkanwendungen verwendet, die Daten zwischen Computern übertragen müssen. Zahlreiche Client/Server-Netzwerkanwendungen, einschließlich Netzwerk-Videokonferenzsysteme, erfordern die Verwendung des UDP-Protokolls. Das UDP-Protokoll wird seit seiner Einführung schon seit vielen Jahren verwendet. Obwohl sein anfänglicher Ruhm von einigen ähnlichen Protokollen in den Schatten gestellt wurde, ist UDP auch heute noch ein sehr praktisches und praktikables Protokoll der Netzwerktransportschicht.

    Wie das bekannte TCP-Protokoll (Transmission Control Protocol) liegt das UDP-Protokoll direkt über dem IP-Protokoll (Internet Protocol). Gemäß dem OSI-Referenzmodell (Open Systems Interconnection) sind sowohl UDP als auch TCP Transportschichtprotokolle. Die Hauptfunktion des UDP-Protokolls besteht darin, den Netzwerkdatenverkehr in Datenpakete zu komprimieren. Ein typisches Datenpaket ist eine Übertragungseinheit binärer Daten. Die ersten 8 Bytes jedes Datenpakets werden zur Aufnahme von Header-Informationen und die restlichen Bytes zur Aufnahme spezifischer Übertragungsdaten verwendet.

    UDP und TCP

    udp ist ein verbindungsloses Protokoll und erfordert keinen TCP-Handshake Die maximale Länge des jeweils gesendeten UDP beträgt 65535, während TCP nach dem Handshake kontinuierlich senden kann

    • Das UDP-Protokoll verwendet den Prüfwert im Header, um die Datensicherheit zu gewährleisten. Der Prüfwert wird zunächst durch einen speziellen Algorithmus beim Datensender berechnet und muss nach der Weitergabe an den Empfänger neu berechnet werden. Wenn ein Datagramm während der Übertragung von Dritten manipuliert oder aufgrund von Leitungsrauschen oder aus anderen Gründen beschädigt wird, stimmen die Prüfsummenberechnungen von Sender und Empfänger nicht überein, sodass das UDP-Protokoll erkennen kann, ob ein Fehler vorliegt. Dies unterscheidet sich vom TCP-Protokoll, das einen Prüfwert erfordert.

    • UDP-Nachrichten verfügen nicht über Zuverlässigkeitsgarantie-, Sequenzgarantie- und Flusskontrollfelder usw. und ihre Zuverlässigkeit ist schlecht. Da das UDP-Protokoll jedoch über weniger Steuerungsmöglichkeiten verfügt, ist die Verzögerung bei der Datenübertragung gering und die Datenübertragungseffizienz hoch. Es eignet sich für Anwendungen, die keine hohe Zuverlässigkeit erfordern, oder für Anwendungen, die Zuverlässigkeit garantieren können, wie z. B. DNS , TFTP und SNMP warten.

    • In einer Umgebung, in der die Netzwerkqualität sehr unbefriedigend ist, ist der Verlust von UDP-Protokollpaketen schwerwiegender. TCP führt eine Bestätigungsüberprüfung durch, um sicherzustellen, dass die andere Partei erfolgreich empfängt

    • udp kann an alle Hosts im Gateway senden

    • bereits erwähnt, Multiprozess ist hauptsächlich eine Entwicklungsmethode zur Entwicklung der Geschäftslogikebene und zur parallelen Verarbeitung mehrerer Aufgaben. Wie oben erwähnt, ist PHP-FPM der Prozessmanager von Fast-CGI dass mehrere Fast-CGI-Prozesse gestartet werden und auf die Aufgabenverarbeitung warten

    • Auf der PHP-FPM-Softwareebene gehören die mehreren Fast-CGI-Prozesse zur Multiprozessverarbeitung. Wenn der Benutzer jedoch eine Anfrage initiiert,
    • Wenn Nginx es zur Verarbeitung der Anfrage an PHP-FPM übergibt, belegt jede Anfrage auf dieser Ebene tatsächlich nur einen PHP-Fast-CGI-Prozess für die Verarbeitungslogik. Für den PHP-Prozess, der die Geschäftslogik ausführt ist eigentlich ein einzelner Prozess.

    Wenn wir eine PHP-Datei direkt ausführen, wird standardmäßig nur ein PHP-Prozess geöffnet, um den PHP-Code auszuführen.

    Entwicklungsszenario mit mehreren Prozessen

    Im herkömmlichen Webmodus war PHP immer ein einzelner Prozess zur Verarbeitung der Geschäftslogik. Nur im PHP-CLI-Modus, der zur Verarbeitung asynchroner Aufgaben und als Netzwerkserver verwendet wird, können mehrere Prozesse ausgeführt werden Verarbeitung verwendet werden. Daher sind die meisten PHPer für Nicht vertraut mit dem Konzept der PHP-Mehrprozessverarbeitung geeignet Die Pipeline-Kommunikation ist in benannte Pipes und unbenannte Pipes unterteilt. Warten Sie, Sie können es selbst tun. Suchen Sie nach Details

    Nachrichtenwarteschlangenkommunikation unter Verwendung der Linux-Nachrichtenwarteschlange, erweitert durch sysvmsg, Sie können Folgendes anzeigen: http://www.php20.cn/article/137

    Prozesssignalkommunikation, Sie können Folgendes anzeigen: http://www.php20.cn/article/134

  • Die Shared-Memory-Kommunikation bildet einen Speicherabschnitt ab, auf den andere Prozesse zugreifen können. Dieser Shared-Memory wird von einem Prozess erstellt, kann aber von mehreren Prozessen aufgerufen werden.

  • Shared Memory ist die schnellste IPC-Methode. Sie wurde speziell für die Ineffizienz anderer prozessübergreifender Kommunikationsmethoden entwickelt.

  • Es wird häufig in Verbindung mit anderen Kommunikationsmechanismen wie Signalen verwendet, um eine Synchronisierung und Kommunikation zwischen Prozessen zu erreichen.

  • Socket-Kommunikation

  • Die Kommunikation mit Dritten kann auch mithilfe von Dateioperationen, MySQL, Redis und anderen Methoden erreicht werden

Coroutine

Coroutine ist kein Prozess oder Thread, sein Ausführungsprozess ähnelt eher einer Unterroutine. oder Sagt einen Funktionsaufruf ohne Rückgabewert.

Ein Programm kann mehrere Coroutinen enthalten, was mit einem Prozess verglichen werden kann, der mehrere Threads enthält. Vergleichen wir also unten Coroutinen und Threads.

Wir wissen, dass mehrere Threads relativ unabhängig sind, ihren eigenen Kontext haben und das Umschalten vom System gesteuert wird. Coroutinen sind ebenfalls relativ unabhängig,

haben ihren eigenen Kontext, aber ihr Umschalten wird von ihnen selbst gesteuert Von der aktuellen Coroutine umgeschaltet. Der Wechsel zu anderen Coroutinen wird von der aktuellen Coroutine gesteuert.

Coroutine und Prozess

wird durch die oben genannte Coroutine-Ausführungssequenz bestimmt Code 2, wir können diese Coroutine leicht finden. Tatsächlich Es ist nur eine Funktion, die in einem Prozess ausgeführt wird, aber diese Funktion wird sozusagen bei der nächsten Ausführung umgeschaltet:

Coroutine ist nur eine Reihe von Task-Codes, die im Prozess ausgeführt werden, aber diese Task-Codes können Beachten Sie, dass es sich bei Coroutinen nicht um parallele Multitasks handelt, sondern um serielle Multitasks. Jeder Prozess führt jeweils nur eine Task aus. Der Umfang der Coroutinen ist fällig zu den Coroutinen Ein Prozess ist eine Reihe von Aufgabencodes im Prozess, daher werden alle seine globalen Variablen, statischen Variablen und anderen Variablen gemeinsam genutzt, einschließlich des globalen Puffers von PHP

Daher müssen Sie während der Entwicklung besondere Aufmerksamkeit darauf legen Die globalen Variablen in der Coroutine, statische Variablen, wirken sich auf alle Coroutinen aus. Wenn Sie die ob-Pufferfunktion zum Abfangen verwenden, müssen Sie auch berücksichtigen, ob sie durch die Ausgabe anderer Coroutinen verunreinigt wird
Verwenden Sie

Code 2 in der Coroutine-Ausführungssequenz erklärt, dass, wenn Task1 $_GET['name'] den Wert 1 zuweist, Task2 $_GET['name'] liest und ebenfalls 1 ist und Task2 $ _GET['name'] Wenn der Wert 2 ist, liest Task3 $_GET['name'] und es wird auch 2 sein Der Coroutine sollte besondere Aufmerksamkeit gewidmet werden. Sie können eine E/A-Verbindung nicht gemeinsam nutzen, da es sonst zu Datenanomalien kommt. Verwenden Sie den Code 2 in Coroutine-Ausführungssequenz

, um dies zu erklären, wenn die Funktionen task1 und task2 gemeinsam genutzt werden Die MySQL-Verbindung und beide führen aufgrund der Coroutine-Ausführungssequenz Abfragen durch.

Die Prozesse laufen übergreifend ab, was dazu führen kann, dass Task1 die von Task1 + Task2 abgefragten Daten erhält, oder dass ein Teil der Daten verloren geht und von Task1 abgerufen wird Task2.

Aufgrund des Cross-Running-Mechanismus müssen die von Task1 + Task2 abgefragten Daten unabhängig sein, daher müssen wir in jeder Coroutine eine Verbindung erstellen Da die Anzahl der MySQL- und Redis-Verbindungen begrenzt ist und das Öffnen und Schließen der Verbindung viele Ressourcen verbraucht, können wir die Verbindungspoollösung verwenden, um gemeinsam genutzte Verbindungen zu implementieren (solange jede Verbindung nur von einer Coroutine verwendet wird). Empfohlenes Lernen: Swoole-Tutorial

Das obige ist der detaillierte Inhalt vonOrganisieren Sie Swoole-Wissenspunkte im Detail (Zusammenfassungsfreigabe).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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