Mit der kontinuierlichen Entwicklung und Popularisierung des Internets ist die Netzwerkprogrammierungstechnologie für viele Programmierer zu einer der notwendigen Fähigkeiten geworden. In diesem Bereich ist Swoole ein hervorragendes Framework für die Netzwerkkommunikation. Swoole ist ein Erweiterungsmodul von PHP, das leistungsstarke Netzwerkprogrammierungsfunktionen wie asynchrone E/A, Multiprozesse und Coroutine bereitstellt und Probleme wie hohe Parallelität und hohe Leistung gut lösen kann. Dieser Artikel stellt Ihnen Swooles grundlegende Einführungsanleitung zur Netzwerkprogrammierung vor.
1. Installation und Konfiguration von Swoole
Die Installation von Swoole erfordert eine PHP-Version größer als 7.0, und phpize und php-config müssen mit dem folgenden Befehl installiert werden:
$ git clone https://github.com/swoole/swoole-src.git $ cd swoole-src $ phpize $ ./configure $ make && make install
Nachdem die Installation abgeschlossen ist , fügen Sie Folgendes zur php.ini-Konfiguration hinzu:
extension=swoole.so
2. Grundlegende Verwendung von Swoole
1. Erstellen Sie einen TCP-Server
Swoole kann über den folgenden Code einen TCP-Server erstellen und den lokalen Port 9501 abhören:
$server = new SwooleServer("0.0.0.0", 9501);
2. Auf Ereignisse warten
Der Server muss auf die Client-Ereignisse wie Terminalverbindung, Empfang von Daten, Schließen der Verbindung usw. hören. Sie können den folgenden Code anhören:
$server->on('connect', function ($serv, $fd) { echo "Client: connect. "; }); $server->on('receive', function ($serv, $fd, $from_id, $data) { $serv->send($fd, "Server: ".$data); }); $server->on('close', function ($serv, $fd) { echo "Client: close. "; });
Im obigen Code wird die on-Methode verwendet, um den Ereignisnamen und die Rückruffunktion zu binden.
3. Starten Sie den Server
Nach Abschluss der Ereignisüberwachung müssen Sie den folgenden Code ausführen, um den Server zu starten:
$server->start();
An diesem Punkt wurde erfolgreich ein TCP-Server erstellt. Es kann mit Tools wie Telnet getestet werden.
3. Einen UDP-Server erstellen
Swoole kann auch einen UDP-Server erstellen und seine Verwendung ähnelt der eines TCP-Servers. Das Folgende ist ein Beispielcode zum Erstellen eines UDP-Servers:
$server = new SwooleServer("0.0.0.0", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP); $server->on('Packet', function ($server, $data, $clientInfo) { $server->sendto($clientInfo['address'], $clientInfo['port'], "Server ".$data); }); $server->start();
Im obigen Code wird ein UDP-Server erstellt, um den 9502-Port des lokalen Computers abzuhören. Wenn Daten an den Server gesendet werden, wird das Paketereignis ausgelöst und die Daten werden an den Client zurückgesendet.
4. Einen WebSocket-Server erstellen
Swoole kann auch einen WebSocket-Server erstellen. WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das auf dem TCP-Protokoll basiert. Das Folgende ist ein Beispielcode zum Erstellen eines WebSocket-Servers:
$server = new SwooleWebSocketServer("0.0.0.0", 9503); $server->on('open', function (SwooleWebSocketServer $server, $request) { echo "server: handshake success with fd{$request->fd} "; }); $server->on('message', function (SwooleWebSocketServer $server, $frame) { echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish} "; $server->push($frame->fd, "this is server"); }); $server->on('close', function ($ser, $fd) { echo "client {$fd} closed "; }); $server->start();
Im obigen Code wird ein WebSocket-Server erstellt, um den 9503-Port des lokalen Computers abzuhören. Wenn ein Client eine Verbindung herstellt, wird das Open-Ereignis ausgelöst. Wenn ein Client eine Nachricht sendet, wird das Nachrichtenereignis ausgelöst und die Nachricht wird unverändert an den Client zurückgesendet. Wenn ein Client die Verbindung schließt, wird das Schließereignis ausgelöst.
3. Erweiterte Verwendung von Swoole
1. Verwenden Sie die asynchrone Task-Aufgabe. Die von Swoole bereitgestellte Task-Funktion kann einige zeitaufwändige Geschäftslogik asynchron verarbeiten, ohne die Ausführung des Hauptprozesses zu blockieren. Das Folgende ist der Beispielcode der Aufgabe:
$server = new SwooleServer("0.0.0.0", 9501); $server->on('receive', function ($serv, $fd, $from_id, $data) { $task_id = $serv->task($data); //投递异步任务 echo "Dispath AsyncTask: id=$task_id "; }); $server->on('task', function ($serv, $task_id, $from_id, $data) { echo "New AsyncTask[id=$task_id]".PHP_EOL; // 处理异步任务 $serv->finish("$data -> OK"); }); $server->on('finish', function ($serv, $task_id, $data) { echo "AsyncTask[$task_id] Finish: $data".PHP_EOL; }); $server->start();
Wenn im obigen Beispielcode ein Client Daten an den Server sendet, wird die Aufgabe an die Aufgabenwarteschlange übermittelt und die asynchrone Aufgabe wird im onTask-Ereignis verarbeitet. Nachdem die Aufgabenverarbeitung abgeschlossen ist, wird das onFinish-Ereignis aufgerufen, um die Verarbeitungsergebnisse an den Client zurückzugeben.
2. Verwenden Sie Coroutinen
Coroutinen sind eine von Swoole bereitgestellte Methode zur gleichzeitigen Programmierung, mit der zig Millionen Ebenen gleichzeitiger Verarbeitung in einem Thread erreicht werden können. Das Folgende ist ein Beispielcode für die Verwendung von Coroutine:
Coun(function () { $client = new SwooleCoroutineClient(SWOOLE_SOCK_TCP); if (!$client->connect('127.0.0.1', 9501, 0.5)) { echo "connect failed. Error: {$client->errCode} "; } $client->send("hello swoole"); $res = $client->recv(); echo $res; $client->close(); });
Im obigen Beispielcode wird eine Coroutine-Aufgabe mit Coun erstellt, ein TCP-Client wird über SwooleCoroutineClient erstellt und die Connect-Methode wird zum Herstellen einer Verbindung verwendet. Wenn die Verbindung erfolgreich hergestellt wurde, verwenden Sie die Send-Methode zum Senden einer Nachricht und die Recv-Methode zum Empfangen des Rückgabeergebnisses. Verwenden Sie abschließend die Methode close, um die Verbindung zu schließen.
4. Zusammenfassung
Dieser Artikel stellt die grundlegende Verwendung des Swoole-Netzwerkprogrammierframeworks vor und demonstriert die Verwendung von TCP-Server, UDP-Server, WebSocket-Server, asynchronen Aufgabenaufgaben, Coroutinen und anderen Funktionen anhand von Beispielcode. Swoole ist flexibel und leistungsstark und kann in vielen Szenarien hervorragende Ergebnisse erzielen. Allerdings werden von den Entwicklern auch gewisse Grundkenntnisse und gezieltes Programmierdenken verlangt. Ich glaube, dass die Leser durch die Einleitung dieses Artikels ein vorläufiges Verständnis und eine Anwendung von Swoole erlangen können.
Das obige ist der detaillierte Inhalt vonSwoole Network Programming Basics Anfängerleitfaden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!