Fluxo Básico
(Exemplo de um simples servidor de chat Websocket)
1. Crie um diretório para o projeto em qualquer lugar
Como em SimpleChat/
Entre no diretório e execute composer require workerman/workerman
2. Inclua vendor/autoload.php (gerado após a instalação via composer)
Crie start.php e inclua vendor/autoload.php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
3. Selecione o protocolo
Aqui escolhemos o protocolo de texto (um protocolo personalizado no Workerman, com formato de texto + nova linha)
(Atualmente, o Workerman suporta HTTP, Websocket e o protocolo de texto. Se você precisar usar outro protocolo, consulte o capítulo sobre protocolos para desenvolver seu próprio protocolo.)
4. Escreva o script de entrada de acordo com suas necessidades
Por exemplo, o seguinte é um arquivo de entrada simples para o 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, atribua um uid, salve a conexão e notifique todos os clientes
function handle_connection($connection)
{
global $text_worker, $global_uid;
// Atribuindo um uid a esta conexão
$connection->uid = ++$global_uid;
}
// Quando um cliente envia uma mensagem, retransmita para todos
function handle_message(TcpConnection $connection, $data)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("usuário[{$connection->uid}] disse: $data");
}
}
// Quando um cliente se desconecta, faça uma transmissão para todos os clientes
function handle_close($connection)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("usuário[{$connection->uid}] saiu");
}
}
// Crie um Worker com protocolo de texto escutando a interface 2347
$text_worker = new Worker("text://0.0.0.0:2347");
// Inicie apenas 1 processo, facilitando a transferência 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 com o comando telnet
telnet 127.0.0.1 2347