Executando verificação de segurança...
7

Websocket ou HTTP?

Websocket é um protocolo que permite a comunicação bidirecional entre um navegador web e um servidor. Ele permite a criação de uma espécie de túnel que transporta, de forma contínua, informações entre o navegador e o servidor de uma aplicação. Ele também faz parte das especificações do HTML5 e é suportado pelas últimas versões dos navegadores;

Para entendê-lo melhor, vamos compará-lo ao modelo HTTP:

Quando você abre seu navegador, para acessar um site, uma conexão é criada, em seguida é realizada uma requisição ao servidor do site. Ao receber essa requisição, o servidor fará os devidos processos internos e devolverá uma resposta. Assim que a resposta é recebida, a conexão é encerrada. Caso seja necessário pedir ao servidor mais informações, será necessário realizar uma nova requisição, que se encerra após enviada a resposta.

Como cada requisição dessas possui um atraso, esse modelo acaba sendo um grande problema para aplicações web que precisam requisitar informações a um servidor de forma contínua, como um chat ou até mesmo um jogo on-line. Mesmo após receber as informações do servidor, o navegador pode realizar requisições sem precisar recarregar a página, usando o bom e velho AJAX, que é uma chamada assíncrona feita com JavaScript.

Porém, mesmo realizando uma chamada assíncrona, por baixo dos panos é realizada uma nova requisição HTTP! Sendo assim, temos o mesmo problema de performance.

Por isso, o Websocket veio para resolver este problema de comunicação! Uma vez que, ao utilizarmos o Websocket, a conexão criada entre o navegador e o servidor é contínua e, por isso, a velocidade de tráfego é muito superior ao protocolo HTTP.

Apesar de poderoso, o conceito de arquitetura do Websocket é bem simples!

É uma arquitetura baseada em eventos, na qual o navegador e o servidor vão receber e emitir eventos um para o outro. Como citado acima, um bom exemplo de aplicação que demanda informações em tempo real é um chat. Por isso, vamos comparar o fluxo utilizando o HTTP e o Websocket em um chat.

HTTP:

Enquanto o usuário 1 digita a mensagem, ambos os navegadores realizam requisições continuamente para o servidor, para saber se existe alguma mensagem a ser entregue.

Assim que a mensagem do usuário 1 é enviada ao servidor, o usuário 2 apenas receberá após o navegador realizar a próxima requisição ao servidor, e vice-versa.

Ou seja, são necessárias diversas requisições mesmo quando não há mensagem para ser recebida.

Além disso, a mensagem também não é entregue de forma automática, sendo necessário que o usuário realize uma nova requisição até recebê-la.

Websocket:

Nesse protocolo uma conexão persistente entre o navegador e o servidor é estabelecida para cada usuário no momento em que ele entra no site. Assim que uma mensagem é enviada, ela é entregue ao destinatário, mesmo que ele não solicite a atualização de forma explícita.

Percebe-se que, utilizando o Websocket, não estaremos sobrecarregando o servidor com requisições inúteis, e as informações fluem de forma mais rápida e contínua.

Vale lembrar que Websocket é suportado por diversas linguagens e ambientes como: C, C++, C#, Java, Ruby, Python, PHP dentre várias outras. Porém serão encontradas, principalmente, implementações en NodeJS, que foi a pioneira na adaptação para o uso de Websocket, por conta da arquitetura do JavaScript.

Como tudo no mundo da tecnologia, o Websocket não é a melhor solução para todos os problemas! Ele é aconselhável estritamente em aplicações que demandam comunicação bilateral e em tempo real. Por isso, utilizá-lo em casos diferentes pode afetar negativamente sua aplicação, perdendo em performance e dificultando a vida do desenvolvedor para realizar processos simples.

Alguns cases interessantes de utilização de Websocket são os jogos .io, que são jogos multiplayer via browser. Alguns outros conhecidos são: Slither.io, Agar.io e o Surviv.io.

Caso queira conhecer mais jogos desse tipo, sugiro o site io-games.io.
Exemplo de funcionamento

Carregando publicação patrocinada...
1

baita texto! fiquei curioso em saber o que muda no front, como é feita essa chamada/ conexão com o socket, existem bicliotecas pra isso? existe nativo no javascript?

1

Bom dia Amigo, tudo certo kra show de bola tema que é muito atual e gera muitas dúvidas, só verifica em seu repositório as imagens não estão sendo direciondas para um local correto, caindo em um 404

1

É a melhor explicação que já vi sobre o tema. Parabéns!
Esse é o tipo de textão que dá gosto de ler.
Agora me tira uma dúvida, no caso de aplicações que ja integram Websocket, como o Blazor que escreve em c#, é uma perda de performance fazer um httpRequest, por exemplo um get em uma web api ?

1

HTTP é a estratégia primária. Há casos em que o websocket não funciona então usar pooling ou long pooling sempre é mais confiável.
Tudo é um tradeoff.

1

meu primeiro contato com websockets foi no video do Deschamps,mas fiquei curioso com uma coisa,quais seriam os problemas que aconteceriam em um projeto usando o websocket?

1
1

Ótimo texto. Preciso me aventurar no websocket para o desenvolvimento de jogos multiplayers com Unity. Vou procurar um solução que rode NojeJS no servidor. Obrigado pelas ficas amigo.

1