Aplicações em tempo real com PHP usando WebSockets \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 13 Horas 

 42 Min 

 35 Seg 

   Tempo restante da oferta: 13 42 35 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Aplicações em tempo real com PHP usando WebSockets  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

# Aplicações em tempo real com PHP usando WebSockets

 Neste artigo veremos uma introdução a WebSockets com a criação de um servidor em PHP e usando o navegador do usuário como cliente.

 [ Kennedy Tedesco ](https://www.treinaweb.com.br/blog/autor/kennedy-tedesco) 7 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/28160855/websockts-php.png)  

Neste artigo veremos uma introdução a WebSockets com a criação de um servidor em PHP e usando o navegador do usuário como cliente.

Antes, entretanto, recomendo que você assista o vídeo [O que são WebSockets?](https://www.youtube.com/watch?v=VQ4cAHbWi0Y) gravado pelo [Akira Hanashiro](https://www.treinaweb.com.br/blog/author/akira-hanashiro/) (aqui da TreinaWeb) que explica de uma forma bem sucinta.

E, se você tiver interesse, também recomendo a leitura do artigo [Uma introdução a TCP, UDP e Sockets](https://www.treinaweb.com.br/blog/uma-introducao-a-tcp-udp-e-sockets/) para se ter a base do que é um socket na arquitetura **TCP/IP**.

[  ![PHP - Fundamentos](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/php.svg)   Curso PHP - Fundamentos Conhecer o curso ](https://www.treinaweb.com.br/curso/php-fundamentos)

**Ok, mas o que é um WebSocket?**

WebSocket é um protocolo que permite a criação de um canal de comunicação cliente-servidor com transmissão bidirecional onde ambos os lados (cliente e servidor) podem transmitir dados simultaneamente. WebSocket veio para suprir as deficiências do protocolo [Http](https://www.treinaweb.com.br/blog/o-que-e-http-request-get-post-response-200-404/ "Http") para esse objetivo. O protocolo Http, que por sinal, é unidirecional (a transmissão ocorre só de uma ponta para a outra), onde o cliente envia a requisição e o servidor retorna a resposta, finalizando ali a conexão. Ou seja, se o cliente envia 5 requisições Http para o servidor, 5 conexões TCP independentes são abertas, enquanto que com WebSocket uma única conexão TCP é aberta e ela fica disponível para troca de dados a qualquer momento (uma conexão persistente, até que um dos lados decida fechá-la).

É muito importante pontuar, também, que Socket e WebSocket são coisas diferentes. Um WebSocket é um protocolo que roda em cima de sockets TCP, enquanto que um socket é uma abstração, uma porta lógica de comunicação entre duas pontas numa rede.

**Benefícios de usar WebSocket em detrimento a Http**

Se existe a necessidade de uma conexão permanecer aberta por um longo tempo para uma troca de dados constante, WebSocket é uma ótima escolha. Uma conexão Http é relativamente pesada, ela transmite não só os dados, mas também cabeçalhos. Além disso, possui um curto tempo de vida e não mantém estado (stateless).

Já uma conexão WebSocket, depois do [handshake](https://pt.wikipedia.org/wiki/Handshake) entre o cliente e o servidor, ela permanece aberta até que uma das partes decida fechá-la. E foco dela é na transmissão dos dados, cabeçalhos não são transmitidos pra lá e pra cá.

Então, em resumo, os benefícios em relação ao Http são: baixa latência, conexão persistente e full-duplex (transmissão bidirecional).

**Principais casos de uso para WebSockets**

Home Brokers (onde cotações são atualizadas a todo instante), feeds de redes sociais, aplicativos de bate-papo, ferramentas de edição colaborativa, jogos multi-player etc.

**Criando o primeiro servidor**

Neste artigo usaremos a library [Ratchet](https://github.com/ratchetphp/Ratchet) que nos permite criar um servidor WebSocket assíncrono, e para isso ela utiliza o *event loop* do [ReactPHP](https://www.treinaweb.com.br/blog/introducao-a-programacao-assincrona-em-php-usando-o-reactphp/). Outra opção seria utilizarmos o servidor de WebSocket do [Swoole](https://www.treinaweb.com.br/blog/introducao-ao-swoole-framework-php-assincrono-baseado-em-corrotinas/). Mas o bom de usar o ReactPHP é que não precisamos instalar nenhuma extensão específica na nossa instalação do PHP.

Crie uma pasta chamada `websocket-demo` e dentro dela crie o arquivo `composer.json`:

```json
{
    "require": {
        "cboden/ratchet": "^0.4.1"
    }
}

```

Instale as dependências:

```bash
$ composer install

```

Agora, crie um arquivo `server.php` com a seguinte implementação:

```php
