Esempio di sviluppo semplice
Installazione
Installare workerman
Eseguire il seguente comando in una directory vuota
composer require workerman/workerman
Esempio 1: Fornire servizi Web esterni 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';
// Creare un Worker in ascolto sulla porta 2345, utilizzando il protocollo http per la comunicazione
$http_worker = new Worker("http://0.0.0.0:2345");
// Avviare 4 processi per fornire servizi esterni
$http_worker->count = 4;
// Quando riceve dati inviati dal browser, risponderà con "hello world" al browser
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
// Inviare "hello world" al browser
$connection->send('hello world');
};
// Eseguire il Worker
Worker::runAll();
Eseguire da riga di comando (utenti Windows utilizzino cmd)
php start.php start
Test
Assumendo che l'indirizzo IP del server sia 127.0.0.1
Nel browser, visitare l'URL http://127.0.0.1:2345
Nota:
-
Se si verifica l'inesperienza di accesso, consultare la sezione Motivi per l'errore di connessione del client.
-
Il server utilizza il protocollo http, pertanto può comunicare solo tramite tale protocollo: non è possibile comunicare direttamente tramite websocket o altri protocolli.
Esempio 2: Fornire servizi esterni utilizzando il protocollo WebSocket
Creare il file ws_test.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Nota: qui, a differenza dell'esempio precedente, viene utilizzato il protocollo websocket
$ws_worker = new Worker("websocket://0.0.0.0:2000");
// Avviare 4 processi per fornire servizi esterni
$ws_worker->count = 4;
// Quando riceve dati inviati dal client, restituisce "hello $data" al client
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
// Inviare "hello $data" al client
$connection->send('hello ' . $data);
};
// Eseguire il Worker
Worker::runAll();
Eseguire da riga di comando
php ws_test.php start
Test
Aprire il browser Chrome, premere F12 per aprire la console di debug, quindi nella console inserire (oppure inserire il seguente codice in una pagina html e eseguirlo tramite javascript)
// Assumendo che l'indirizzo 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("Inviato al server una stringa: tom");
};
ws.onmessage = function(e) {
alert("Messaggio ricevuto dal server: " + e.data);
};
Nota:
-
Se si verifica l'inesperienza di accesso, consultare la sezione Motivi per l'errore di connessione del client.
-
Il server utilizza il protocollo websocket, pertanto può comunicare solo tramite tale protocollo: non è possibile comunicare direttamente tramite http o altri protocolli.
Esempio 3: Trasferire direttamente dati tramite TCP
Creare il file tcp_test.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Creare un Worker in ascolto sulla porta 2347, senza utilizzare alcun protocollo di livello applicativo
$tcp_worker = new Worker("tcp://0.0.0.0:2347");
// Avviare 4 processi per fornire servizi esterni
$tcp_worker->count = 4;
// Quando arriva un dato inviato dal client
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
// Inviare "hello $data" al client
$connection->send('hello ' . $data);
};
// Eseguire il Worker
Worker::runAll();
Eseguire da riga di comando
php tcp_test.php start
Test: Eseguire da riga di comando
(L'effetto nel terminale di Linux è il seguente, potrebbe variare in ambiente Windows)
telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
tom
hello tom
Nota:
-
Se si verifica l'inesperienza di accesso, consultare la sezione Motivi per l'errore di connessione del client.
-
Il server utilizza il protocollo TCP puro: non è possibile comunicare direttamente tramite websocket, http o altri protocolli.