Heim  >  Artikel  >  PHP-Framework  >  So verwenden Sie Workerman zur Implementierung einer Netzwerkprogrammierung mit hoher Parallelität

So verwenden Sie Workerman zur Implementierung einer Netzwerkprogrammierung mit hoher Parallelität

PHPz
PHPzOriginal
2023-11-07 09:05:18987Durchsuche

So verwenden Sie Workerman zur Implementierung einer Netzwerkprogrammierung mit hoher Parallelität

Mit der kontinuierlichen Entwicklung von Netzwerkanwendungen ist die Netzwerkprogrammierung mit hoher Parallelität zu einer der wichtigen Technologien in der heutigen Entwicklung von Netzwerkanwendungen geworden. Workerman ist ein leistungsstarkes Netzwerkkommunikations-Framework, das auf PHP basiert. Es bietet eine vollständige Netzwerkprogrammierungslösung, die es uns ermöglicht, Netzwerkprogrammierung mit hoher Parallelität einfacher zu implementieren.

In diesem Artikel wird anhand einiger spezifischer Codebeispiele erläutert, wie Sie mit Workerman eine Netzwerkprogrammierung mit hoher Parallelität implementieren.

1. Workerman installieren

Workerman ist ein Erweiterungspaket eines Drittanbieters, wir müssen es über Composer installieren. Geben Sie im Terminal den folgenden Befehl ein:

composer require workerman/workerman

Nach Abschluss der Installation gibt es im Projektstammverzeichnis ein zusätzliches Anbieterverzeichnis, das Workerman-bezogene Dateien enthält.

2. Erstellen Sie einen einfachen TCP-Server

Lassen Sie uns einen einfachen TCP-Server erstellen, die Verbindungsanforderung des Clients überwachen und die vom Client gesendeten Daten an den Client zurücksenden. Erstellen Sie zunächst eine server.php-Datei im Projektstammverzeichnis mit folgendem Inhalt:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use WorkermanWorker;

$server = new Worker('tcp://0.0.0.0:8080');

$server->onConnect = function($connection) {
    echo "New client connected
";
};

$server->onMessage = function($connection, $data) {
    $connection->send($data);
};

$server->onClose = function($connection) {
    echo "Client closed connection
";
};

Worker::runAll();

Im obigen Code haben wir ein neues Worker-Objekt erstellt, um auf Client-Verbindungsanfragen zu warten. Wenn sich der Client mit dem Server verbindet, wird die Callback-Funktion onConnect aufgerufen, in der wir eine erfolgreiche Verbindungsmeldung ausgeben. Wenn der Client eine Nachricht sendet, ruft der Server die Rückruffunktion onMessage auf und gibt die vom Client gesendeten Daten intakt an den Client zurück. Wenn der Client die Verbindung trennt, ruft der Server die Rückruffunktion onClose auf und gibt eine Trennungsmeldung aus. Abschließend rufen wir die Funktion Worker::runAll() auf, um den Server zu starten.

3. Starten Sie den Server

Geben Sie das Projektstammverzeichnis im Terminal ein und geben Sie den folgenden Befehl ein, um den Server zu starten:

php server.php start

Nach dem Start erscheint die folgende Eingabeaufforderung:

Workerman[2022]: Worker starting...
Workerman[2022]: Worker started.

Zeigt an, dass der Server gestartet wurde erfolgreich.

4. Testen Sie den Server

Mit dem Telnet-Befehl können Sie den normalen Betrieb des Servers testen. Geben Sie im Terminal den folgenden Befehl ein:

telnet 127.0.0.1 8080

Nach erfolgreicher Verbindung können Sie einige Inhalte eingeben und der Server gibt die eingegebenen Inhalte unverändert zurück. Wenn wir die Verbindung trennen möchten, können wir Strg+] eingeben und dann beenden, um den Telnet-Client zu verlassen.

5. Verwenden Sie den Multiprozessmodus

Wenn viele Verbindungen vorhanden sind, kann der Einzelprozessmodus die Anforderungen nicht mehr erfüllen. Zu diesem Zeitpunkt können wir den Multiprozessmodus verwenden, um eine hohe Parallelitätsverarbeitung zu erreichen. Das Folgende ist ein Beispielcode, der den Multiprozessmodus von Workerman verwendet:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use WorkermanWorker;

$worker = new Worker('tcp://0.0.0.0:8080');

$worker->count = 4;

$worker->onWorkerStart = function($worker) {
    echo "Worker #" . $worker->id . " started
";
};

$worker->onConnect = function($connection) {
    echo "New client connected
";
};

$worker->onMessage = function($connection, $data) {
    $connection->send($data);
};

$worker->onClose = function($connection) {
    echo "Client closed connection
";
};

Worker::runAll();

Im obigen Code haben wir die Zeile $worker->count = 4; hinzugefügt, was bedeutet, dass 4 Prozesse geöffnet werden, um Clientanfragen gleichzeitig zu bearbeiten Zeit. Wir haben außerdem eine neue Rückruffunktion onWorkerStart hinzugefügt, um beim Start jedes Prozesses eine Nachricht auszugeben.

6. UDP-Protokoll verwenden

Workerman kann auch problemlos das UDP-Protokoll für die Netzwerkprogrammierung verwenden. Das Folgende ist ein Beispielcode für einen UDP-Server:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use WorkermanWorker;

$worker = new Worker('udp://0.0.0.0:8080');

$worker->onMessage = function($connection, $data) {
    $connection->send($data);
};

Worker::runAll();

Darunter verwenden wir udp://0.0.0.0:8080, um einen UDP-Server zu erstellen und die empfangenen Daten am Ende der onMessage-Rückruffunktion intakt an den Client zurückzugeben.

Zusammenfassung

In diesem Artikel wird anhand spezifischer Codebeispiele erläutert, wie Sie mit Workerman eine Netzwerkprogrammierung mit hoher Parallelität implementieren. Vom einfachen TCP-Server über den Multiprozessmodus bis hin zum UDP-Protokoll bietet Workerman komplette Netzwerkprogrammierungslösungen, die es uns erleichtern, Netzwerkprogrammierung mit hoher Parallelität zu implementieren.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Workerman zur Implementierung einer Netzwerkprogrammierung mit hoher Parallelität. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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