Biblioteca Ratchet para WebSocket em PHP
No desenvolvimento web moderno, a troca de dados em tempo real é cada vez mais necessária: chats, notificações, jogos online, edição colaborativa de documentos. O HTTP tradicional não é adequado para essas tarefas, pois funciona no esquema "requisição-resposta". O protocolo WebSocket vem para ajudar, estabelecendo uma conexão bidirecional permanente entre o cliente e o servidor.
Para PHP, uma das bibliotecas mais populares e maduras para trabalhar com WebSocket é o Ratchet. Ela fornece uma API conveniente para criar servidores WebSocket que podem lidar com múltiplas conexões simultâneas. Neste artigo, vamos detalhar como instalar o Ratchet, escrever um servidor e cliente simples, e também abordar cenários típicos de uso.
O que é Ratchet?
Ratchet é uma biblioteca para PHP, construída sobre o ReactPHP (um event-loop assíncrono). Ela permite criar servidores WebSocket que funcionam em tempo real, sem a necessidade de módulos adicionais (como ext-sockets ou ext-event). A biblioteca suporta o padrão RFC 6455 (WebSocket) e integra-se facilmente com qualquer aplicação PHP.
Principais recursos do Ratchet:
- Suporte ao protocolo WebSocket (versões 13 e anteriores).
- Possibilidade de criar controladores personalizados para processar mensagens.
- Suporte integrado ao WAMP (WebSocket Application Messaging Protocol) para pub/sub (publicador-assinante) e RPC (chamada remota de procedimentos).
- Fácil integração com frameworks (Laravel, Symfony) através de pacotes separados.
- Alta performance graças à arquitetura assíncrona do ReactPHP.
Instalação do Ratchet
A instalação é feita através do Composer. Para isso, na raiz do seu projeto, execute o comando:
composer require cboden/ratchetApós a instalação, o diretório vendor será criado no seu projeto com a biblioteca e suas dependências (incluindo o ReactPHP). Certifique-se de ter o PHP versão 7.1 ou superior instalado.
Criação de um servidor WebSocket simples
Vamos escrever um servidor simples que recebe mensagens dos clientes e as envia de volta (servidor eco). Crie o arquivo server.php:
<?phprequire __DIR__ . '/vendor/autoload.php';
use Ratchet\\MessageComponentInterface;use Ratchet\\ConnectionInterface;use Ratchet\\Server\\IoServer;use Ratchet\\Http\\HttpServer;use Ratchet\\WebSocket\\WsServer;
class EchoServer implements MessageComponentInterface { public function onOpen(ConnectionInterface $conn) { echo "Nova conexão: {$conn->resourceId}"; }
public function onMessage(ConnectionInterface $from, $msg) { echo "Mensagem recebida de {$from->resourceId}: {$msg}"; // Envia a mensagem de volta para o remetente $from->send("Eco: {$msg}"); }
public function onClose(ConnectionInterface $conn) { echo "Conexão {$conn->resourceId} fechada"; }
public function onError(ConnectionInterface $conn, \\Exception $e) { echo "Erro: {$e->getMessage()}"; $conn->close(); }}
// Inicia o servidor na porta 8080$server = IoServer::factory( new HttpServer( new WsServer( new EchoServer() ) ), 8080);
echo "Servidor WebSocket iniciado na porta 8080";$server->run();Inicie o servidor com o comando php server.php. Ele ficará ouvindo conexões WebSocket na porta 8080.
Criação de um cliente (JavaScript)
Para testar, crie um arquivo HTML simples com um cliente JavaScript:
<!DOCTYPE html><html><head> <title>Cliente WebSocket</title></head><bod Também na biblioteca
golangci-lint para Go: guia completo com exemplos práticos
Aprendizado de Máquina em Kotlin: visão geral das bibliotecas para Data Science e ML
Monitoramento de aplicações Kotlin: biblioteca Ktor Metrics e Micrometer