Biblioteca WebSocket Ratchet para PHP: criando aplicações em tempo real
WebSocket é um protocolo que permite comunicação bidirecional entre cliente e servidor através de uma única conexão persistente. Diferente do HTTP tradicional, onde cada requisição abre uma nova conexão, o WebSocket permite transmitir dados em tempo real sem atrasos. Para PHP, uma das bibliotecas mais populares para trabalhar com WebSocket é o Ratchet. Esta biblioteca é construída sobre o ReactPHP e fornece uma API simples e poderosa para criar servidores WebSocket.
O que é Ratchet?
Ratchet é uma biblioteca PHP de código aberto que permite aos desenvolvedores criar aplicações em tempo real, como chats, notificações, jogos online e sistemas de monitoramento. Ela abstrai a complexidade de trabalhar com sockets e I/O assíncrono, fornecendo classes e interfaces convenientes.
Principais recursos do Ratchet:
- Suporte a WebSocket conforme a especificação RFC 6455
- Integração com servidores HTTP (por exemplo, via ReactPHP)
- Possibilidade de criar manipuladores de mensagens personalizados
- Suporte a WAMP (WebSocket Application Messaging Protocol) para Pub/Sub
- Leveza e alta performance
Instalação do Ratchet
A instalação da biblioteca é feita através do Composer. Execute no terminal:
composer require cboden/ratchetApós a instalação, uma pasta vendor com as dependências necessárias, incluindo o ReactPHP, será criada no seu projeto.
Criando um servidor WebSocket simples
Vamos considerar um exemplo básico: criar um servidor que aceita conexões e envia uma mensagem de boas-vindas de volta. Para isso, crie o arquivo server.php:
<?phprequire 'vendor/autoload.php';
use Ratchet\\MessageComponentInterface;use Ratchet\\ConnectionInterface;use Ratchet\\Server\\IoServer;use Ratchet\\Http\\HttpServer;use Ratchet\\WebSocket\\WsServer;
class MyWebSocket implements MessageComponentInterface { protected $clients;
public function __construct() { $this->clients = new \\SplObjectStorage; }
public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "Nova conexão: {$conn->resourceId}"; $conn->send("Bem-vindo! Seu ID: {$conn->resourceId}"); }
public function onMessage(ConnectionInterface $from, $msg) { echo "Mensagem recebida de {$from->resourceId}: {$msg}"; // Envia para todos os clientes foreach ($this->clients as $client) { if ($from !== $client) { $client->send("Mensagem de {$from->resourceId}: {$msg}"); } } }
public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Conexão {$conn->resourceId} fechada"; }
public function onError(ConnectionInterface $conn, \\Exception $e) { echo "Erro: {$e->getMessage()}"; $conn->close(); }}
$server = IoServer::factory( new HttpServer( new WsServer( new MyWebSocket() ) ), 8080);
echo "Servidor WebSocket rodando na porta 8080...";$server->run();Inicie o servidor com o comando:
php server.phpAgora o servidor está ouvindo na porta 8080. Para testar, você pode usar qualquer cliente WebSocket, como uma extensão de navegador ou um código JavaScript simples.
Parte cliente em JavaScript
Crie o arquivo HTML client.html:
<!DOCTYPE html><html><head> <title>Cliente WebSocket</title></head><body> <input type="text" id="message" placeholder="Dig
```