Heim Backend-Entwicklung PHP-Tutorial Detaillierte Einführung des Multiprozess-Echoservers in die PHPSocket-Programmierung (Bild und Text)

Detaillierte Einführung des Multiprozess-Echoservers in die PHPSocket-Programmierung (Bild und Text)

Sep 13, 2018 pm 05:11 PM
linux php socket

Dieser Artikel bietet Ihnen eine detaillierte Einführung (Bilder und Text) über den Multiprozess-Echo-Server. Ich hoffe, dass er für Sie hilfreich ist.

Das letzte Echo-Dienstprogramm weist einen großen Mangel auf, nämlich dass es nur eine Verbindung zu einem Client gleichzeitig herstellen kann, was offensichtlich unvernünftig ist.

Deshalb verwenden wir dieses Mal einen Multiprozessansatz, um Dienstleistungen für mehrere Kunden gleichzeitig bereitzustellen.

Das Folgende ist der endgültige Effekt:

Detaillierte Einführung des Multiprozess-Echoservers in die PHPSocket-Programmierung (Bild und Text)

(Der von uns erstellte Arbeitsprozess kann über den Befehl ps angezeigt werden)

Detaillierte Einführung des Multiprozess-Echoservers in die PHPSocket-Programmierung (Bild und Text)

(Öffnen Sie mehrere Terminals über xshell und verbinden Sie mehrere Clients mit dem Serviceprogramm)

Beginnen Sie vorher mit dem Codieren, Lassen Sie uns vorstellen, was ein Prozess ist.

Ein Prozess, also ein laufendes Programm, das Speicher belegt, ist ein unabhängiger Speicherplatz. Wenn wir beispielsweise die Notepad-Software unter Windows öffnen, entspricht dieser Vorgang dem Öffnen eines Prozesses.

Multiprozess bedeutet, mehrere Prozesse zu erstellen, um eine Sache gemeinsam abzuschließen.

Dieses Mal müssen wir nur das serverseitige Programm implementieren, und der Client kann weiterhin das vorherige verwenden. Wenn Sie die vorherigen Artikel nicht gelesen haben, können Sie sich die historischen Artikel ansehen.

In PHP können wir die Funktion pcntl_fork verwenden, um einen Prozess zu erstellen.

Das Folgende ist der Prototyp der Funktion:

int pcntl_fork ( void )
Nach dem Login kopieren

Offizielle Erklärung:

Bei Erfolg wird die PID des generierten untergeordneten Prozesses im Ausführungsthread des übergeordneten Prozesses zurückgegeben Prozess, und die PID des untergeordneten Prozesses wird im Ausführungsthread des untergeordneten Prozesses zurückgegeben. Gibt 0 zurück. Bei einem Fehler wird -1 im übergeordneten Prozesskontext zurückgegeben, der untergeordnete Prozess wird nicht erstellt und ein PHP-Fehler wird ausgelöst.

Warum wird es als Thread bezeichnet, der vom übergeordneten Prozess ausgeführt wird? Weil ein Prozess mindestens einen Thread enthält und dieser Thread der Hauptthread des Prozesses ist.

Wenn der übergeordnete Prozess pcntl_fork aufruft, kopiert er auch einen unabhängigen untergeordneten Prozess. Dieser untergeordnete Prozess hat denselben Kontext wie der übergeordnete Prozess. Mit anderen Worten: Die beiden Prozesse verwenden lediglich denselben Code.

Geben Sie den Codierungsprozess ein:

Detaillierte Einführung des Multiprozess-Echoservers in die PHPSocket-Programmierung (Bild und Text)

Durch die Ausführung der Funktion pcntl_fork wird gleichzeitig ein untergeordneter Prozess kopiert Wenn der Kontext die Ausführungsumgebung des übergeordneten Prozesses ist, ist der Rückgabewert die Prozessnummer des untergeordneten Prozesses. Wenn es sich um die Ausführungsumgebung eines untergeordneten Prozesses handelt, wird 0 zurückgegeben. Daher werden in der folgenden Programmstruktur beide Zweige ausgeführt.

Der untergeordnete Prozess verfügt immer noch über die gleiche Logik wie zuvor und wird verwendet, um Nachrichten vom Client zu empfangen und sie gleichzeitig an den Client zu senden.

Die vorletzte Zeile ruft die Funktion pcntl_waitpid auf. Bevor wir diese Funktion erklären, wollen wir zunächst verstehen, was ein Zombie-Prozess ist.

Normalerweise wird der untergeordnete Prozess durch den übergeordneten Prozess erstellt. Da es sich bei Prozessen um unabhängige Speicherstrukturen handelt, kennt der übergeordnete Prozess den Ausführungsstatus des untergeordneten Prozesses nicht. Nachdem der untergeordnete Prozess seine Aufgabe abgeschlossen hat, kann er nicht mehr selbst beendet werden. Zu diesem Zeitpunkt muss der übergeordnete Prozess den Status des untergeordneten Prozesses über das Betriebssystem abrufen, um den untergeordneten Prozess wiederzuverwenden. Andernfalls wird unser untergeordneter Prozess zu einer Müllressource, also einem Zombie-Prozess.

Das Folgende ist der Funktionsprototyp dieser Funktion:

int pcntl_waitpid ( int $pid , int &$status [, int $options = 0 ] )
Nach dem Login kopieren

Offizielle Erklärung:

Warten Sie auf den untergeordneten Prozessstatus von fork oder geben Sie ihn zurück.

Tatsächlich liegt ein Problem mit dem obigen Code vor. Nach dem ersten Aufruf von pcntl_waitpid in foreach ist der Hauptprozess zu diesem Zeitpunkt tatsächlich blockiert und wartet darauf, dass der erste untergeordnete Prozess beendet wird, während andere untergeordnete Prozesse beendet werden Prozesse Wenn es zu diesem Zeitpunkt abnormal beendet wird, wird es vom Hauptprozess nicht recycelt und es wird ein Zombie-Prozess generiert. In der tatsächlichen Entwicklung muss der Hauptprozess noch andere Dinge tun.

Daher wird hier die nicht blockierende Methode empfohlen. Sie ist sehr einfach. Fügen Sie einfach den dritten Parameter hinzu: WNOHANG. Das heißt: pcntl_waitpid ($pid, $status, WNOHANG)

Auf diese Weise kann es sofort zurückkehren, ohne dass der untergeordnete Prozess beendet wird, und somit weiterhin nachfolgenden Code ausführen.

Verwandte Empfehlungen:

Serverseitige PHP-Multiprozess-Programmierpraxis

Serverseitige PHP-Multiprozessprogrammierung practice_PHP-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung des Multiprozess-Echoservers in die PHPSocket-Programmierung (Bild und Text). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP: Eine Einführung in die serverseitige Skriptsprache PHP: Eine Einführung in die serverseitige Skriptsprache Apr 16, 2025 am 12:18 AM

PHP ist eine serverseitige Skriptsprache, die für dynamische Webentwicklung und serverseitige Anwendungen verwendet wird. 1.PHP ist eine interpretierte Sprache, die keine Zusammenstellung erfordert und für die schnelle Entwicklung geeignet ist. 2. PHP -Code ist in HTML eingebettet, wodurch es einfach ist, Webseiten zu entwickeln. 3. PHP verarbeitet die serverseitige Logik, generiert die HTML-Ausgabe und unterstützt Benutzerinteraktion und Datenverarbeitung. 4. PHP kann mit der Datenbank interagieren, die Einreichung von Prozessformularen und serverseitige Aufgaben ausführen.

PHP und das Web: Erforschen der langfristigen Auswirkungen PHP und das Web: Erforschen der langfristigen Auswirkungen Apr 16, 2025 am 12:17 AM

PHP hat das Netzwerk in den letzten Jahrzehnten geprägt und wird weiterhin eine wichtige Rolle bei der Webentwicklung spielen. 1) PHP stammt aus dem Jahr 1994 und ist aufgrund seiner Benutzerfreundlichkeit und der nahtlosen Integration in MySQL die erste Wahl für Entwickler. 2) Zu den Kernfunktionen gehört das Generieren dynamischer Inhalte und die Integration in die Datenbank, sodass die Website in Echtzeit aktualisiert und auf personalisierte Weise angezeigt wird. 3) Die breite Anwendung und das Ökosystem von PHP hat seine langfristigen Auswirkungen angetrieben, steht jedoch auch mit Versionsaktualisierungen und Sicherheitsherausforderungen gegenüber. 4) Leistungsverbesserungen in den letzten Jahren, wie die Veröffentlichung von PHP7, ermöglichen es ihm, mit modernen Sprachen zu konkurrieren. 5) In Zukunft muss PHP sich mit neuen Herausforderungen wie Containerisierung und Microservices befassen, aber seine Flexibilität und die aktive Community machen es anpassungsfähig.

Welche Computerkonfiguration ist für VSCODE erforderlich? Welche Computerkonfiguration ist für VSCODE erforderlich? Apr 15, 2025 pm 09:48 PM

VS Code system requirements: Operating system: Windows 10 and above, macOS 10.12 and above, Linux distribution processor: minimum 1.6 GHz, recommended 2.0 GHz and above memory: minimum 512 MB, recommended 4 GB and above storage space: minimum 250 MB, recommended 1 GB and above other requirements: stable network connection, Xorg/Wayland (Linux)

Warum PHP verwenden? Vorteile und Vorteile erläutert Warum PHP verwenden? Vorteile und Vorteile erläutert Apr 16, 2025 am 12:16 AM

Zu den Kernvorteilen von PHP gehören einfacher Lernen, starke Unterstützung für Webentwicklung, reiche Bibliotheken und Rahmenbedingungen, hohe Leistung und Skalierbarkeit, plattformübergreifende Kompatibilität und Kosteneffizienz. 1) leicht zu erlernen und zu bedienen, geeignet für Anfänger; 2) gute Integration in Webserver und unterstützt mehrere Datenbanken. 3) leistungsstarke Frameworks wie Laravel; 4) hohe Leistung kann durch Optimierung erzielt werden; 5) mehrere Betriebssysteme unterstützen; 6) Open Source, um die Entwicklungskosten zu senken.

VSCODE kann die Erweiterung nicht installieren VSCODE kann die Erweiterung nicht installieren Apr 15, 2025 pm 07:18 PM

Die Gründe für die Installation von VS -Code -Erweiterungen können sein: Netzwerkinstabilität, unzureichende Berechtigungen, Systemkompatibilitätsprobleme, VS -Code -Version ist zu alt, Antiviren -Software oder Firewall -Interferenz. Durch Überprüfen von Netzwerkverbindungen, Berechtigungen, Protokolldateien, Aktualisierungen von VS -Code, Deaktivieren von Sicherheitssoftware und Neustart von Code oder Computern können Sie Probleme schrittweise beheben und beheben.

So sehen Sie den Docker -Prozess So sehen Sie den Docker -Prozess Apr 15, 2025 am 11:48 AM

Docker Process Viewing -Methode: 1. Docker Cli -Befehl: Docker PS; 2. SYSTEMD CLI -Befehl: SystemCTL Status Docker; 3.. Docker Compose CLI Command: Docker-Compose PS; 4. Process Explorer (Windows); 5. /proc -Verzeichnis (Linux).

Wofür ist VSCODE Wofür ist VSCODE? Wofür ist VSCODE Wofür ist VSCODE? Apr 15, 2025 pm 06:45 PM

VS Code ist der vollständige Name Visual Studio Code, der eine kostenlose und open-Source-plattformübergreifende Code-Editor und Entwicklungsumgebung von Microsoft ist. Es unterstützt eine breite Palette von Programmiersprachen und bietet Syntax -Hervorhebung, automatische Codebettel, Code -Snippets und intelligente Eingabeaufforderungen zur Verbesserung der Entwicklungseffizienz. Durch ein reiches Erweiterungs -Ökosystem können Benutzer bestimmte Bedürfnisse und Sprachen wie Debugger, Code -Formatierungs -Tools und Git -Integrationen erweitern. VS -Code enthält auch einen intuitiven Debugger, mit dem Fehler in Ihrem Code schnell gefunden und behoben werden können.

VSCODE Vorheriger nächster Verknüpfungsschlüssel VSCODE Vorheriger nächster Verknüpfungsschlüssel Apr 15, 2025 pm 10:51 PM

VS Code One-Step/Nächster Schritt Verknüpfungsschlüsselnutzung: Einschritt (rückwärts): Windows/Linux: Strg ←; macOS: CMD ← Nächster Schritt (vorwärts): Windows/Linux: Strg →; macos: cmd →

See all articles