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