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:

  1. Wenn der Zugriff fehlschlägt, überprüfen Sie bitte den Abschnitt Gründe für das Fehlen der Verbindung des Clients.

  2. 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:

  1. Wenn der Zugriff fehlschlägt, überprüfen Sie bitte den Abschnitt Häufige Fragen im Handbuch - Verbindungsfehler.

  2. 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:

  1. Wenn der Zugriff fehlschlägt, überprüfen Sie bitte den Abschnitt Häufige Fragen im Handbuch - Verbindungsfehler.

  2. Der Server verwendet das rohe TCP-Protokoll, sodass eine direkte Kommunikation über WebSocket, http und andere Protokolle nicht möglich ist.