Einfaches Entwicklungsbeispiel
Installation
Installieren Sie workerman
Führen Sie in einem leeren Verzeichnis aus
composer require workerman/workerman
Beispiel 1: Bereitstellung von Webdiensten über das HTTP-Protokoll
Erstellen Sie die Datei start.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
// Erstellen Sie einen Worker, der den Port 2345 überwacht und über das http-Protokoll kommuniziert
$http_worker = new Worker("http://0.0.0.0:2345");
// Starten Sie 4 Prozesse zur Bereitstellung von Diensten
$http_worker->count = 4;
// Antworten Sie dem Browser mit hello world, wenn Daten vom Browser empfangen werden
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
// Senden Sie hello world an den Browser
$connection->send('hello world');
};
// Führen Sie den Worker aus
Worker::runAll();
Ausführen über die Befehlszeile (Windows-Benutzer verwenden cmd-Befehlszeile, dasselbe unten)
php start.php start
Test
Angenommen, die IP des Servers ist 127.0.0.1
Besuchen Sie die URL http://127.0.0.1:2345 im Browser.
Hinweis:
-
Wenn der Zugriff fehlschlägt, überprüfen Sie bitte den Abschnitt Gründe für das Fehlen der Verbindung des Clients.
-
Der Server verwendet das http-Protokoll und kann nur über dieses kommunizieren; andere Protokolle wie WebSocket können nicht direkt kommunizieren.
Beispiel 2: Bereitstellung von Diensten über das WebSocket-Protokoll
Erstellen Sie die Datei ws_test.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Hinweis: Diesmal, im Gegensatz zum vorherigen Beispiel, verwenden wir das websocket-Protokoll
$ws_worker = new Worker("websocket://0.0.0.0:2000");
// Starten Sie 4 Prozesse zur Bereitstellung von Diensten
$ws_worker->count = 4;
// Wenn Daten vom Client empfangen werden, senden Sie hello $data zurück an den Client
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
// Senden Sie hello $data an den Client
$connection->send('hello ' . $data);
};
// Führen Sie den Worker aus
Worker::runAll();
Ausführen über die Befehlszeile
php ws_test.php start
Test
Öffnen Sie den Chrome-Browser, drücken Sie F12, um die Entwicklertools zu öffnen, und geben Sie im Bereich Konsole Folgendes ein (oder fügen Sie den folgenden Code in eine HTML-Seite ein und führen Sie ihn mit JS aus):
// Angenommen, die IP des Servers ist 127.0.0.1
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
alert("Verbindung erfolgreich");
ws.send('tom');
alert("Eine Zeichenkette an den Server senden: tom");
};
ws.onmessage = function(e) {
alert("Nachricht vom Server erhalten: " + e.data);
};
Hinweis:
-
Wenn der Zugriff fehlschlägt, überprüfen Sie bitte den Abschnitt Häufige Fragen im Handbuch - Verbindungsfehler.
-
Der Server verwendet das WebSocket-Protokoll und kann nur über dieses kommunizieren; andere Protokolle wie http könnten nicht direkt kommunizieren.
Beispiel 3: Direkter Datentransfer über TCP
Erstellen Sie die Datei tcp_test.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Erstellen Sie einen Worker, der den Port 2347 überwacht, ohne eine Anwendungsschichtprotokoll zu verwenden
$tcp_worker = new Worker("tcp://0.0.0.0:2347");
// Starten Sie 4 Prozesse zur Bereitstellung von Diensten
$tcp_worker->count = 4;
// Wenn der Client Daten sendet
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
// Senden Sie hello $data an den Client
$connection->send('hello ' . $data);
};
// Führen Sie den Worker aus
Worker::runAll();
Ausführen über die Befehlszeile
php tcp_test.php start
Test: Ausführen über die Befehlszeile
(Das folgende ist das Verhalten der Linux-Befehlszeile, das sich von Windows unterscheidet)
telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^>'.
tom
hello tom
Hinweis:
-
Wenn der Zugriff fehlschlägt, überprüfen Sie bitte den Abschnitt Häufige Fragen im Handbuch - Verbindungsfehler.
-
Der Server verwendet das rohe TCP-Protokoll, sodass eine direkte Kommunikation über WebSocket, http und andere Protokolle nicht möglich ist.