WebSockets em PHP: Criando aplicações em tempo real sem mágica

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

WebSockets em PHP: como fazer o site falar em tempo real

\n\n

Imagine um site comum. Você clica em um botão — e espera a página atualizar. É como enviar uma carta pelo correio: você a coloca na caixa e torce para que chegue. Agora imagine que você está falando ao telefone — ouve o interlocutor imediatamente. WebSockets são exatamente esse "telefone" para a web. E sim, em PHP funciona.

\n\n

Muitos acham que WebSocket é coisa de Node.js ou Python. Mas o PHP, embora tenha sido criado para "colar" HTML, há muito superou seu berço. Hoje vamos entender como fazer uma aplicação em tempo real com PHP — seja um chat, um feed de notificações ou análise ao vivo. E sem gambiarras.

\n\n

Se você já tentou fazer um chat ao vivo em PHP usando long polling e viu o servidor cair com 1000 requisições por segundo — este artigo é para você. WebSockets mudam as regras do jogo.

\n\n

O que é WebSocket e por que o PHP se dá bem com ele?

\n\n

WebSocket é um canal de comunicação bidirecional entre o navegador e o servidor. Diferente do HTTP, onde o cliente sempre inicia a requisição, aqui o servidor pode enviar dados diretamente ao cliente. Isso proporciona tempo real verdadeiro, não uma simulação.

\n\n

A principal diferença do long polling (quando o cliente pergunta constantemente "e aí, tem novidades?") é que no WebSocket a conexão permanece aberta. Estabelece uma vez — e se comunica sem interrupções. A economia de tráfego e recursos é colossal.

\n\n

O PHP, como linguagem, executa scripts sequencialmente. Mas isso não o impede de ser um excelente servidor para WebSocket. O segredo está na arquitetura: não executamos o PHP através de um servidor web (Apache/Nginx) para cada conexão, mas o usamos como um daemon independente. E é aí que entram as bibliotecas.

\n\n

Bibliotecas para WebSocket em PHP: qual escolher?

\n\n

As duas bibliotecas mais populares merecem atenção:

\n\n
    \n
  • Ratchet — o avô dos WebSockets em PHP. Confiável, testado, mas um pouco "antiquado". Usa modelo de eventos baseado em ReactPHP. Ótimo para chats simples e notificações.
  • \n
  • Swoole — um monstro. Não é apenas uma biblioteca, mas um motor completo que reescreve o núcleo do PHP. Oferece assincronicidade, corrotinas e desempenho próximo ao Go. Mas requer instalação de extensão no servidor.
  • \n
\n\n

Para um primeiro contato, recomendo o Ratchet — é mais fácil de aprender e não exige alterações no php.ini. Além disso, funciona perfeitamente com ReactPHP, que também abordaremos hoje.

\n\n

Criando um servidor WebSocket simples em PHP com Ratchet

\n\n

Vamos criar um servidor echo básico. Ele receberá mensagens do cliente e as enviará de volta. É o clássico "Hello, World" para WebSocket.

\n\n

Primeiro, instale o Ratchet via Composer. Abra o terminal na raiz do projeto:

\n\n
composer require cboden/ratchet
\n\n

Agora crie o arquivo server.php:

\n\n
<?php\nrequire __DIR__ . '/vendor/autoload.php';\n\nuse Ratchet\\MessageComponentInterface;\nuse Ratchet\\ConnectionInterface;\n\nclass EchoServer implements MessageComponentInterface {\n    public function onOpen(ConnectionInterface $conn) {\n        echo "Nova conexão: {$conn->resourceId}\\n";\n    }\n\n    public function onMessage(ConnectionInterface $from, $msg) {\n        echo "Recebido: {$msg}\\n";\n        $from->send("Eco: {$msg}");\n    }\n\n    public function onClose(ConnectionInterface $conn) {\n        echo "Conexão {$conn->resourceId} fechada\\n";\n    }\n\n    public function onError(ConnectionInterface $conn, \\Exception $e) {\n        echo "Erro: {$e->getMessage()}\\n";\n        $conn->close();\n    }\n}\n\n// Iniciando o servidor\nuse Ratchet\\Server\\IoServer;\nuse Ratchet\\Http\\HttpServer;\nuse Ratchet\\WebSocket\\WsServer;\n\                

Blogs

Book Recommendations