WebSocket em PHP: criando aplicações em tempo real do zero

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course
```html

WebSocket em PHP: criando aplicações em tempo real do zero



As aplicações web modernas exigem reação instantânea às ações dos usuários. O protocolo HTTP padrão, que funciona no princípio de "requisição-resposta", não é adequado para tarefas onde os dados precisam ser atualizados em tempo real — chats, notificações, cotações de bolsa ou jogos online. A solução para este problema é o WebSocket. Neste artigo, vamos analisar como implementar WebSocket em PHP, criar um chat simples e discutir as melhores práticas.



O que é WebSocket e por que ele é necessário em PHP?



WebSocket é um protocolo de comunicação que fornece uma conexão bidirecional persistente entre o cliente (navegador) e o servidor. Ao contrário do HTTP, após o estabelecimento da conexão, os dados podem ser transmitidos em ambas as direções a qualquer momento, sem requisições repetidas. Isso é crucial para aplicações em tempo real.



O PHP é tradicionalmente considerado uma linguagem para lógica de servidor que opera no esquema "iniciar-executar-finalizar". No entanto, com o surgimento de bibliotecas assíncronas como Ratchet e ReactPHP, o PHP se tornou uma ferramenta completa para criar servidores WebSocket. As principais vantagens de usar WebSocket em PHP:



  • Entrega instantânea de dados — sem atrasos de requisições HTTP repetidas.
  • Redução da carga no servidor — uma única conexão substitui dezenas de requisições Long Polling.
  • Facilidade de integração — se seu projeto já está em PHP, não é necessário mudar a pilha de tecnologia.


Instalação e configuração da biblioteca Ratchet



Para trabalhar com WebSocket em PHP, usaremos a biblioteca Ratchet (em conjunto com ReactPHP). A instalação é feita via Composer:



composer require cboden/ratchet


Após a instalação, criaremos uma classe base para o servidor WebSocket. No Ratchet, o servidor é implementado através da interface MessageComponentInterface, que contém quatro métodos:



  • onOpen — chamado quando um novo cliente se conecta.
  • onMessage — processa uma mensagem recebida.
  • onClose — acionado quando um cliente se desconecta.
  • onError — trata erros de conexão.


Exemplo de um servidor simples:



<?phpuse Ratchet\\MessageComponentInterface;use Ratchet\\ConnectionInterface;

class ChatServer 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}"; }

public function onMessage(ConnectionInterface $from, $msg) { foreach ($this->clients as $client) { if ($from !== $client) { $client->send($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(); }}


Iniciando o servidor WebSocket e a parte do cliente



Para iniciar o servidor, crie um script server.php:



<?phprequire __DIR__ . '/vendor/autoload.php';

use Ratchet\\Server\\IoServer;use Ratchet\\Http\\HttpServer;use Ratchet\\WebSocket\\WsServer;

$server = IoServer::factory( new HttpServer( new WsServer( new ChatServer() ) ), 8080);

echo "Servidor WebSocket iniciado na porta 8080";$server->run();


Inicie o servidor com o comando:



php server.php
```

Blogs

Book Recommendations