Você sabia que WebSocket e HTTP são protocolos de comunicação, usados na comunicação entre cliente e servidor? No artigo de hoje o dataholic Michel Oliveira vai nos contar mais sobre esses protocolos. Boa leitura!
HTTP
O HTTP (HyperText Transfer Protocol) é um protocolo que permite a obtenção de recursos, como documentos HTML. É a base de qualquer troca de dados na Web e um protocolo que chamamos de cliente-servidor, o que significa que as requisições são iniciadas pelo destinatário (cliente), geralmente um navegador da web. Um documento completo é reconstruído a partir dos diferentes sub-documentos obtidos, como por exemplo texto, descrição do layout (CSS), imagens, vídeos, scripts e muito mais.
Imagem blog informática para todos
WebSockets
WebSocket é um protocolo de comunicação bidirecional, que pode enviar os dados do cliente para o servidor, ou do servidor para o cliente reutilizando o canal de conexão estabelecido (bidirecional). A conexão é mantida ativa até ser encerrada pelo cliente ou pelo servidor. Os WebSockets permitem que o servidor e o cliente enviem mensagens a qualquer momento, sem qualquer relação com uma solicitação anterior. Uma vantagem notável de usar WebSockets, é que quase todos os navegadores suportam o protocolo.
Imagem js-tutorials.com
Diferenças
O HTTP quando usado durante o acesso de um site, abre uma conexão com o servidor e é feita uma requisição para esse servidor. O servidor então processa essa requisição e devolve uma resposta normalmente em HTML. Quando essa resposta é recebida pelo cliente, a conexão com o servidor é fechada, impedindo que o navegador envie mais informações para o servidor e vice-versa. Se precisarmos pedir mais informações ao servidor, uma nova conexão deverá ser criada.
Cada requisição que fazemos para o servidor possuí um certo atraso, o que pode ser um problema para aplicações que precisam fazer requisições contínuas ao servidor, um exemplo disso são chats e jogos online.
Existe uma forma de o navegador fazer novas requisições para o servidor sem que haja a necessidade de recarregar a página. Podemos utilizar o ajax, que realiza uma chamada assíncrona com JavaScript, mas ainda assim, por debaixo dos panos o protocolo HTTP será utilizado, logo teremos perda de performance.
É aí que entra o Websocket, pois quando uma conexão com o servidor é criada utilizando esse protocolo, a conexão não é finalizada. Isso faz com que as informações trafeguem de forma muito mais rápida do que navegariam com o protocolo HTTP, pois não há mais necessidade de criar uma nova conexão toda vez que uma requisição for feita.
Tomando como exemplo um chat online, usando o Websocket, quando o usuário1 enviar uma mensagem para o usuário2, a mensagem vai para o servidor que automaticamente envia para o usuário1, sem que ele faça uma requisição.
Já com o HTTP, a mensagem é enviada ao servidor, e só é entregue ao usuário1 quando o mesmo faz a requisição. Utilizando o websockets não sobrecarregamos o servidor.
Embora a maioria das implementações de websockets sejam com node.js, você pode usá-lo com diversas outras linguagens, como por exemplo C, C++, C#, Java, entre outras.
O websockets é uma das melhores alternativas de protocolo atualmente, mas é claro que nem tudo é perfeito. É preciso saber o momento de quando usá-lo e quando não o usar, o ideal é usá-lo para aplicações que demandam comunicação bilateral em tempo real. Utilizá-lo em outros tipos de aplicação pode não ocasionar melhora, mas sim afetá-la negativamente com perda de performance.
WebSockets será a melhor escolha no contexto de comunicação contínua em tempo real. Você provavelmente já jogou os jogos .io, esses jogos são um exemplo perfeito de onde usar o poder do websocket; já pensou jogar agar.io com o protocolo HTTP? Não seria a melhor opção, não é mesmo?