[Web] Enviando eventos do back para o front

 Bem, todo mundo aqui sabe como funciona o típico Cliente-Servidor, onde o cliente manda uma requisição e o servidor responde, de uma maneira simples e unidirecional, em que o cliente sempre precisará informar o que necessita. Porém, tem casos que precisamos fazer o caminho inverso, onde o servidor notifica o cliente. Por exemplo: Notificar algum processo mais demorado, mostrando o quanto já foi realizado ou avisar sobre novos conteúdos.

Depois desses exemplos, você já pode estar pensando “Ah, websockets”, mas não. E porque não? Então, websockets é uma comunicação bidirecional entre o cliente e o servidor, ou seja, quando uma conexão http (GET 1.1 upgrade) é realizada pelo cliente, irá mandar a solicitação ao servidor para a troca de protocolo (ws ou wss), criando uma conexão direta entre eles dois. Isso seria um caso perfeito para um chat, por exemplo.

Então, como eu faço para ter essa conexão unidirecional do servidor para o cliente? Aí que entra Server-Sent Events (SSE). Com SSE, o cliente se conecta e manda uma requisição http (GET text/event-stream), onde o servidor vai abrir uma conexão direta, note que o content-type é event-stream ou seja você sempre vai trabalhar com chunks de informação.

Dependendo do seu uso, um SSE faz muito mais sentido que um websockets, pois como reparamos, muitas das aplicações utilizam de uma comunicação bidirecional para realizar algo que na realidade só o servidor precisaria notificar. Fora outras vantagens, como ser um meio de comunicação bem mais leve que websocket, ser 100% compatível com HTTP2 e mais fácil de escalar (comparado com websocket). 

Por hoje é isso. E como tudo na vida é um grande depende, isso é só mais um, normalmente quando temos algo onde o servidor tem que notificar o cliente, muito provavelmente algum dia o cliente terá que notificar o servidor, então usar um websocket pode ser mais fácil, mas caso você realmente tenha algo super simples (como notificações), utilizar um SSE faz bem mais sentido. Abraços!