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:
-
Se ocorrer dificuldade de acesso, consulte a seção Razões para Falha de Conexão do Cliente para solução de problemas.
-
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:
-
Se ocorrer dificuldade de acesso, consulte a seção Perguntas Frequentes do Manual - Falha de Conexão para solução de problemas.
-
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:
-
Se ocorrer dificuldade de acesso, consulte a seção Perguntas Frequentes do Manual - Falha de Conexão para solução de problemas.
-
O servidor utiliza o protocolo TCP puro e não pode se comunicar diretamente com outros protocolos, como websocket ou http.