Semplice esempio di sviluppo

Installazione

Installare workerman
Eseguire in una directory vuota
composer require workerman/workerman

Esempio 1: fornire un servizio Web utilizzando il protocollo HTTP

Creare il file start.php

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

// Crea un Worker che ascolta sulla porta 2345, usando il protocollo http per comunicare
$http_worker = new Worker("http://0.0.0.0:2345");

// Avvia 4 processi per fornire il servizio
$http_worker->count = 4;

// Quando riceve i dati inviati dal browser, risponde con hello world al browser
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
    // Invia hello world al browser
    $connection->send('hello world');
};

// Eseguire il worker
Worker::runAll();

Esegui da riga di comando (gli utenti Windows usano cmd命令行,lo stesso di seguito)

php start.php start

Test

Supponiamo che l'IP del server sia 127.0.0.1

Accedere all'URL http://127.0.0.1:2345 nel browser

Attenzione:

  1. Se si verifica un problema di accesso, consultare la sezione Ragioni per il fallimento della connessione del client.

  2. Il server utilizza il protocollo http e può comunicare solo usando il protocollo http, non può comunicare direttamente utilizzando protocolli come websocket.

Esempio 2: fornire un servizio utilizzando il protocollo WebSocket

Creare il file ws_test.php

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

// Attenzione: qui è diverso dall'esempio precedente, si utilizza il protocollo websocket
$ws_worker = new Worker("websocket://0.0.0.0:2000");

// Avvia 4 processi per fornire il servizio
$ws_worker->count = 4;

// Quando riceve i dati inviati dal client, restituisce hello $data al client
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
    // Invia hello $data al client
    $connection->send('hello ' . $data);
};

// Eseguire il worker
Worker::runAll();

Esegui da riga di comando

php ws_test.php start

Test

Aprire il browser Chrome, premere F12 per aprire la console di debug, inserire nella scheda Console (o inserire il codice sottostante in una pagina html per eseguirlo con js)

// Supponiamo che l'IP del server sia 127.0.0.1
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
    alert("Connessione riuscita");
    ws.send('tom');
    alert("Invia una stringa al server: tom");
};
ws.onmessage = function(e) {
    alert("Ricevuto messaggio dal server: " + e.data);
};

Attenzione:

  1. Se si verifica un problema di accesso, consultare la sezione Domande frequenti del manuale - Connessione fallita.

  2. Il server utilizza il protocollo websocket e può comunicare solo usando il protocollo websocket, non può comunicare direttamente utilizzando protocolli come http.

Esempio 3: trasmettere dati utilizzando TCP direttamente

Creare tcp_test.php

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

// Crea un Worker che ascolta sulla porta 2347, senza utilizzare alcun protocollo livello applicativo
$tcp_worker = new Worker("tcp://0.0.0.0:2347");

// Avvia 4 processi per fornire il servizio
$tcp_worker->count = 4;

// Quando il client invia dati
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
    // Invia hello $data al client
    $connection->send('hello ' . $data);
};

// Eseguire il worker
Worker::runAll();

Esegui da riga di comando

php tcp_test.php start

Test: esecuzione da riga di comando
(La seguente è l'uscita della riga di comando di Linux, che differisce da quella di Windows)

telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
tom
hello tom

Attenzione:

  1. Se si verifica un problema di accesso, consultare la sezione Domande frequenti del manuale - Connessione fallita.

  2. Il server utilizza un protocollo TCP nudo, non può comunicare direttamente utilizzando altri protocolli come websocket o http.