Fluxo Básico
(Usando um servidor de chat Websocket simples como exemplo)
1. Criar o diretório do projeto em qualquer lugar
Por exemplo: SimpleChat/
Entre no diretório e execute composer require workerman/workerman
2. Incluir vendor/autoload.php
(gerado após a instalação do composer)
Crie um arquivo start.php e inclua vendor/autoload.php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
3. Escolher um protocolo
Aqui nós escolhemos o protocolo de texto (um protocolo personalizado no Workerman, com formato de texto + quebra de linha)
(Atualmente, o Workerman suporta os protocolos HTTP, Websocket e de texto. Se precisar usar outros protocolos, consulte o capítulo de protocolos para desenvolver seu próprio protocolo)
4. Escrever um script de inicialização conforme necessário
Por exemplo, o seguinte é um arquivo de entrada simples para uma sala de chat.
SimpleChat/start.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$global_uid = 0;
// Quando um cliente se conecta, atribui um uid, salva a conexão e notifica todos os clientes
function handle_connection($connection)
{
global $text_worker, $global_uid;
// Atribui um uid para esta conexão
$connection->uid = ++$global_uid;
}
// Quando um cliente envia uma mensagem, encaminha para todos
function handle_message(TcpConnection $connection, $data)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] disse: $data");
}
}
// Quando um cliente se desconecta, avisa todos os clientes
function handle_close($connection)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] desconectou");
}
}
// Cria um Worker de protocolo de texto escutando na porta 2347
$text_worker = new Worker("text://0.0.0.0:2347");
// Inicia apenas um processo para facilitar a transmissão de dados entre os clientes
$text_worker->count = 1;
$text_worker->onConnect = 'handle_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close';
Worker::runAll();
5. Teste
O protocolo de texto pode ser testado usando o comando telnet
telnet 127.0.0.1 2347