Exemplo de Desenvolvimento Simples
Instalação
Instalar o Workerman
Execute o seguinte comando em um diretório vazio
composer require workerman/workerman
Exemplo 1: Fornecer Serviço Web Externo usando o protocolo HTTP
Crie o arquivo start.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
// Crie um Worker para ouvir a porta 2345 e usar comunicação do protocolo HTTP
$http_worker = new Worker("http://0.0.0.0:2345");
// Inicialize 4 processos para fornecer serviços externos
$http_worker->count = 4;
// Quando receber dados enviados pelo navegador, responderá com "hello world" para o navegador
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
// Enviar "hello world" para o navegador
$connection->send('hello world');
};
// Execute o worker
Worker::runAll();
Execute no terminal (para os usuários do Windows, use o cmd)
php start.php start
Teste
Supondo o endereço IP do servidor seja 127.0.0.1
Acesse a URL http://127.0.0.1:2345 em um navegador
Nota:
-
Se não for possível acessar, consulte a seção Razões para Falha na Conexão do Cliente para solucionar o problema.
-
O servidor é do protocolo HTTP, podendo apenas se comunicar utilizando o protocolo HTTP. Não é possível se comunicar diretamente com outros protocolos, como o WebSocket.
Exemplo 2: Fornecer Serviço Externo utilizando o protocolo WebSocket
Crie o arquivo ws_test.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Observação: diferente do exemplo anterior, aqui usaremos o protocolo websocket
$ws_worker = new Worker("websocket://0.0.0.0:2000");
// Inicialize 4 processos para fornecer serviços externos
$ws_worker->count = 4;
// Quando receber dados enviados pelo cliente, retornará "hello $data" para o cliente
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
// Enviar "hello $data" para o cliente
$connection->send('hello ' . $data);
};
// Execute o worker
Worker::runAll();
Execute no terminal
php ws_test.php start
Teste
Abra o navegador Chrome e pressione F12 para abrir o console de inspeção. Na aba Console, digite (ou insira o código abaixo em uma página HTML e execute-o em JavaScript)
// Supondo o endereç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("Envie uma string para o servidor: tom");
};
ws.onmessage = function(e) {
alert("Mensagem recebida do servidor: " + e.data);
};
Nota:
-
Se não for possível acessar, consulte a seção Falha na Conexão do Cliente no Manual de Perguntas Frequentes para solucionar o problema.
-
O servidor é do protocolo WebSocket, podendo apenas se comunicar utilizando o protocolo WebSocket. Não é possível se comunicar diretamente com outros protocolos, como o HTTP.
Exemplo 3: Transferência Direta de Dados via TCP
Crie o arquivo tcp_test.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Crie um Worker para ouvir a porta 2347 sem utilizar nenhum protocolo de camada de aplicativo
$tcp_worker = new Worker("tcp://0.0.0.0:2347");
// Inicialize 4 processos para fornecer serviços externos
$tcp_worker->count = 4;
// Quando o cliente enviar dados
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
// Enviar "hello $data" para o cliente
$connection->send('hello ' . $data);
};
// Execute o worker
Worker::runAll();
Execute no terminal
php tcp_test.php start
Teste: Execute no terminal
(Aqui está a saída do terminal Linux, a aparência é um pouco diferente em ambientes Windows)
telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
tom
hello tom
Nota:
-
Se não for possível acessar, consulte a seção Falha na Conexão do Cliente no Manual de Perguntas Frequentes para solucionar o problema.
-
O servidor é do protocolo TCP bruto, não é possível se comunicar diretamente com outros protocolos como WebSocket e HTTP.