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:
-
Se si verifica un problema di accesso, consultare la sezione Ragioni per il fallimento della connessione del client.
-
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:
-
Se si verifica un problema di accesso, consultare la sezione Domande frequenti del manuale - Connessione fallita.
-
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:
-
Se si verifica un problema di accesso, consultare la sezione Domande frequenti del manuale - Connessione fallita.
-
Il server utilizza un protocollo TCP nudo, non può comunicare direttamente utilizzando altri protocolli come websocket o http.