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