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