Flujo básico

(Usando un simple servidor de chat Websocket como ejemplo)

1. Crear un directorio de proyecto en cualquier lugar

Por ejemplo, SimpleChat/
Accede al directorio y ejecuta composer require workerman/workerman

2. Incluir vendor/autoload.php (generado tras la instalación con composer)

Crea start.php e incluye vendor/autoload.php

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

3. Seleccionar el protocolo

Aquí seleccionamos el protocolo de texto (un protocolo personalizado en Workerman, con formato de texto + salto de línea)

(Actualmente, Workerman soporta HTTP, Websocket y protocolo de texto. Si necesitas utilizar otros protocolos, consulta el capítulo de protocolos para desarrollar el tuyo propio.)

4. Escribir el script de inicio según sea necesario

A continuación, el siguiente es un archivo de entrada simple para el chat.

SimpleChat/start.php

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

$global_uid = 0;

// Cuando un cliente se conecta, asignar un uid, guardar la conexión y notificar a todos los clientes
function handle_connection($connection)
{
    global $text_worker, $global_uid;
    // Asignar un uid a esta conexión
    $connection->uid = ++$global_uid;
}

// Cuando un cliente envía un mensaje, reenviarlo a todos
function handle_message(TcpConnection $connection, $data)
{
    global $text_worker;
    foreach($text_worker->connections as $conn)
    {
        $conn->send("user[{$connection->uid}] dijo: $data");
    }
}

// Cuando un cliente se desconecta, transmitir a todos los clientes
function handle_close($connection)
{
    global $text_worker;
    foreach($text_worker->connections as $conn)
    {
        $conn->send("user[{$connection->uid}] ha cerrado sesión");
    }
}

// Crear un Worker de protocolo de texto que escuche en el puerto 2347
$text_worker = new Worker("text://0.0.0.0:2347");

// Solo iniciar 1 proceso, así se facilita la transferencia de datos entre clientes
$text_worker->count = 1;

$text_worker->onConnect = 'handle_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close';

Worker::runAll();

5. Prueba

El protocolo de texto se puede probar con el comando telnet

telnet 127.0.0.1 2347