Usando Server-Sent Events em vez de WebSockets
(germano.dev)-
Ao criar aplicações web em tempo real, normalmente se pensa em WebSockets, mas SSE também pode ser uma alternativa simples
-
Problemas dos WebSockets: como não são baseados em HTTP, não se beneficiam das vantagens do HTTP
→ sem compressão, suporte insuficiente a multiplexação HTTP/2, proxies não dão suporte, possibilidade de hijacking
- Server-Sent Events (SSE)
→ recurso que permite ao servidor enviar eventos push de baixa latência para o cliente
→ é um padrão HTML e é compatível com todos os navegadores (exceto IE)
→ diferentemente dos WebSockets, o SSE funciona em fluxo unidirecional do servidor para o cliente (não é adequado para jogos que exigem comunicação bidirecional)
→ funciona sobre HTTP e não exige protocolo separado
5 comentários
Em ambientes com Load Balancer ou Proxy, muitas vezes o suporte a SSE é insuficiente. (+ firewall corporativo)
Se você estiver considerando ambientes como Cloudflare ou AWS CLB etc., vale a pena verificar mais uma vez antes de adotar SSE.
Também há casos em que ele é usado no lugar de WebSocket como transporte para GraphQL Subscription.
Implementação do handler de GraphQL SSE: https://github.com/enisdenjo/graphql-sse
Exemplo de uso de SSE como transporte de Subscription: https://www.graphql-yoga.com/docs/features/subscriptions
Pode ser uma alternativa quando é difícil implementar WebSockets em ambientes específicos, como Deno Deploy ou Lambda. :-)
Eu também conheci SSE pela primeira vez recentemente, enquanto via um exemplo de chat no Deno Deploy.
https://github.com/lucacasonato/deploy_chat
Interessante. Aprendi algo novo.
Veja também os comentários deste texto e os comentários no HN.
Há muitas opiniões diferentes, incluindo pessoas que usam SSE, casos de migração de WebSocket para SSE e casos em que migraram para SSE e depois voltaram para WebSocket.
https://news.ycombinator.com/item?id=30312897
Na verdade, embora o texto fale bastante sobre as vantagens do SSE, ele acaba sendo útil apenas em cenários específicos.
Hoje em dia também surgiram muitas bibliotecas para WebSocket, então a implementação ficou mais simples.
Também existe esse tipo de argumento.