Exemplo de Desenvolvimento Simples

Instalação

Instalar Workerman
Execute em um diretório vazio
composer require workerman/workerman

Exemplo 1: Fornecer serviços Web usando o protocolo HTTP

Criar arquivo start.php

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

// Cria um Worker que escuta na porta 2345, usando o protocolo http
$http_worker = new Worker("http://0.0.0.0:2345");

// Inicia 4 processos para fornecer serviços
$http_worker->count = 4;

// Ao receber dados do navegador, responde com hello world
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
    // Envia hello world para o navegador
    $connection->send('hello world');
};

// Executa o worker
Worker::runAll();

Executar no terminal (usuários do Windows usam cmd命令行, o mesmo se aplica)

php start.php start

Teste

Supondo que o IP do servidor seja 127.0.0.1

Acesse a URL http://127.0.0.1:2345 no navegador.

Atenção:

  1. Se ocorrer dificuldade de acesso, consulte a seção Razões para Falha de Conexão do Cliente para solução de problemas.

  2. O servidor utiliza o protocolo http e só pode se comunicar utilizando o protocolo http; comunicação direta com outros protocolos, como websocket, não é possível.

Exemplo 2: Fornecer serviços usando o protocolo WebSocket

Criar arquivo ws_test.php

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

// Atenção: diferente do exemplo anterior, aqui usamos o protocolo websocket
$ws_worker = new Worker("websocket://0.0.0.0:2000");

// Inicia 4 processos para fornecer serviços
$ws_worker->count = 4;

// Ao receber dados do cliente, retorna hello $data para o cliente 
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
    // Envia hello $data para o cliente
    $connection->send('hello ' . $data);
};

// Executa o worker
Worker::runAll();

Executar no terminal

php ws_test.php start

Teste

Abra o navegador Chrome, pressione F12 para abrir o console de depuração, na aba Console insira (ou coloque o código abaixo em uma página html para executar com js)

// Supondo que o IP do servidor seja 127.0.0.1
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
    alert("Conexão bem-sucedida");
    ws.send('tom');
    alert("Enviando uma string para o servidor: tom");
};
ws.onmessage = function(e) {
    alert("Mensagem recebida do servidor: " + e.data);
};

Atenção:

  1. Se ocorrer dificuldade de acesso, consulte a seção Perguntas Frequentes do Manual - Falha de Conexão para solução de problemas.

  2. O servidor utiliza o protocolo websocket e só pode se comunicar através do protocolo websocket; comunicação direta com outros protocolos, como http, não é possível.

Exemplo 3: Transmitir dados diretamente usando TCP

Criar tcp_test.php

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

// Cria um Worker que escuta na porta 2347, sem usar qualquer protocolo de camada de aplicação
$tcp_worker = new Worker("tcp://0.0.0.0:2347");

// Inicia 4 processos para fornecer serviços
$tcp_worker->count = 4;

// Quando o cliente enviar dados
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
    // Envia hello $data para o cliente
    $connection->send('hello ' . $data);
};

// Executa o worker
Worker::runAll();

Executar no terminal

php tcp_test.php start

Teste: Executar no terminal
(O resultado do comando abaixo é para Linux e pode ser diferente no Windows)

telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
tom
hello tom

Atenção:

  1. Se ocorrer dificuldade de acesso, consulte a seção Perguntas Frequentes do Manual - Falha de Conexão para solução de problemas.

  2. O servidor utiliza o protocolo TCP puro e não pode se comunicar diretamente com outros protocolos, como websocket ou http.