Os WebSockets e os eventos enviados pelo servidor são capazes de enviar dados para os navegadores. Para mim, elas parecem ser tecnologias concorrentes. Qual a diferença entre eles? Quando você escolheria um sobre o outro?
html
browser
websocket
server-sent-events
Mads Mobæk
fonte
fonte
curl
. Como é apenas um formato de texto sobre HTTP, é fácil ver o que está acontecendo.Respostas:
Websockets e SSE (Server Sent Events) são capazes de enviar dados para navegadores, no entanto, não são tecnologias concorrentes.
As conexões dos Websockets podem enviar dados para o navegador e receber dados do navegador. Um bom exemplo de um aplicativo que poderia usar websockets é um aplicativo de bate-papo.
As conexões SSE podem enviar dados apenas ao navegador. Cotações de ações on-line ou twitters que atualizam a linha do tempo ou o feed são bons exemplos de aplicativos que podem se beneficiar do SSE.
Na prática, já que tudo o que pode ser feito com o SSE também pode ser feito com Websockets, o Websockets está recebendo muito mais atenção e amor, e muitos mais navegadores suportam Websockets que o SSE.
No entanto, pode ser um exagero para alguns tipos de aplicativos, e o back-end pode ser mais fácil de implementar com um protocolo como o SSE.
Além disso, o SSE pode ser polyfilled em navegadores mais antigos que não o suportam nativamente usando apenas JavaScript. Algumas implementações de polyfills SSE podem ser encontradas na página Modernizr github .
Pegadinhas:
www.example1.com
e outras 6 conexões SSEwww.example2.com
(obrigado Phate).O HTML5Rocks tem boas informações sobre SSE. A partir dessa página:
Resumo do TLDR:
Vantagens do SSE sobre Websockets:
Vantagens dos Websockets sobre SSE:
Casos de uso ideais do SSE:
Dicas do SSE:
fonte
De acordo com caniuse.com:
Você pode usar um polyfill somente para cliente para estender o suporte do SSE a muitos outros navegadores. Isso é menos provável com WebSockets. Alguns polyfills EventSource:
Se você precisar oferecer suporte a todos os navegadores, considere usar uma biblioteca como web-socket-js , SignalR ou socket.io que suporte vários transportes, como WebSockets, SSE, Forever Frame e pesquisa longa AJAX. Isso geralmente exige modificações no lado do servidor também.
Saiba mais sobre o SSE em:
Saiba mais sobre o WebSockets em:
Outras diferenças:
fonte
Opera, Chrome, Safari suporta SSE, Chrome, Safari suporta SSE dentro do SharedWorker Firefox suporta XMLHttpRequest readyState interativo, para que possamos tornar o polyfil EventSource para Firefox
fonte
Websocket VS SSE
Web Sockets - É um protocolo que fornece um canal de comunicação full-duplex através de uma única conexão TCP. Por exemplo, uma comunicação bidirecional entre o servidor e o navegador Como o protocolo é mais complicado, o servidor e o navegador precisam confiar na biblioteca de websocket, que é
socket.io
SSE (evento enviado pelo servidor) - No caso de um evento enviado pelo servidor, a comunicação é realizada apenas do servidor para o navegador e o navegador não pode enviar nenhum dado ao servidor. Esse tipo de comunicação é usado principalmente quando a necessidade é apenas mostrar os dados atualizados; o servidor envia a mensagem sempre que os dados são atualizados. Por exemplo, uma comunicação unidirecional entre o servidor e o navegador. Esse protocolo é menos complicado, portanto, não há necessidade de confiar na biblioteca externa JAVASCRIPT, que fornece a
EventSource
interface para receber as mensagens enviadas pelo servidor.fonte
Uma coisa a observar:
tive problemas com websockets e firewalls corporativos. (O uso de HTTPS ajuda, mas nem sempre.)
Consulte https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software https://github.com/sockjs/sockjs-client/issues/94
I supor que não há tantos problemas com Eventos enviados pelo servidor. Mas eu não sei.
Dito isto, os WebSockets são muito divertidos. Eu tenho um pequeno jogo na web que usa websockets (via Socket.IO) ( http://minibman.com )
fonte
Aqui está uma palestra sobre as diferenças entre os soquetes da web e os eventos enviados pelo servidor. Desde o Java EE 7, uma API WebSocket já faz parte da especificação e parece que os eventos enviados pelo servidor serão lançados na próxima versão da edição corporativa.
fonte
O limite máximo de conexão não é um problema com o http2 + sse.
Foi um problema no http 1
fonte