Flusso di base
(Esempio di un semplice server Websocket per una chat)
1. Crea una directory per il progetto in qualsiasi posizione
Ad esempio SimpleChat/
Entra nella directory ed esegui composer require workerman/workerman
2. Includi vendor/autoload.php (generato dopo l'installazione di composer)
Crea start.php e includi vendor/autoload.php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
3. Scegli un protocollo
Qui scegliamo il protocollo di testo (un protocollo personalizzato in Workerman, formato testo + nuova riga)
(Attualmente Workerman supporta i protocolli HTTP, Websocket e Text. Se hai bisogno di utilizzare altri protocolli, si prega di fare riferimento al capitolo sui protocolli per sviluppare il proprio protocollo)
4. Scrivi uno script di avvio di ingresso secondo le necessità
Ad esempio, qui sotto c'è un semplice file di ingresso per la chat.
SimpleChat/start.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$global_uid = 0;
// Quando un client si connette, assegna un uid, salva la connessione e notifica tutti i client
function handle_connection($connection)
{
global $text_worker, $global_uid;
// Assegna un uid a questa connessione
$connection->uid = ++$global_uid;
}
// Quando un client invia un messaggio, inoltra a tutti
function handle_message(TcpConnection $connection, $data)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] said: $data");
}
}
// Quando un client si disconnette, trasmetti a tutti i client
function handle_close($connection)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] logout");
}
}
// Crea un Worker per il protocollo di testo che ascolta l'interfaccia 2347
$text_worker = new Worker("text://0.0.0.0:2347");
// Avvia solo 1 processo per facilitare il trasferimento dei dati tra i client
$text_worker->count = 1;
$text_worker->onConnect = 'handle_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close';
Worker::runAll();
5. Test
Il protocollo Text può essere testato utilizzando il comando telnet
telnet 127.0.0.1 2347