尚和服务器发送的事件都能够将数据推送到浏览器。在我看来,它们似乎是相互竞争的技术。它们之间的区别是什么?什么时候你会选择一个而不是另一个?
Opera, Chrome, Safari支持SSE,Chrome, Safari支持SSE内部的SharedWorkerFirefox支持XMLHttpRequest readyState交互式,因此我们可以为Firefox创建EventSource polyfil
Websockets和SSE (Server Sent Events,服务器发送事件)都能够将数据推送到浏览器,但是它们并不是相互竞争的技术。
Websockets连接既可以向浏览器发送数据,也可以从浏览器接收数据。可以使用websocket的一个很好的例子是聊天应用程序。
SSE连接只能向浏览器推送数据。在线股票报价或twitter更新时间轴或提要是可以从SSE获益的应用程序的好例子。
实际上,因为所有可以用SSE完成的事情都可以用Websockets完成,所以Websockets得到了更多的关注和喜爱,而且比SSE支持Websockets的浏览器也更多。
然而,对于某些类型的应用程序来说,它可能太过了,并且使用SSE之类的协议可以更容易地实现后端。
此外,SSE可以被填充到仅使用JavaScript原生不支持它的旧浏览器中。SSE腻子的一些实现可以在Modernizr github页面上找到。
陷阱:
www.example1.com
www.example2.com
HTML5Rocks有一些关于SSE的好信息。从那一页开始:
服务器发送事件vs. WebSockets 为什么选择服务器发送事件而不是WebSockets?好问题。 sse一直处于阴影中的一个原因是,后来的api(如WebSockets)提供了更丰富的协议来执行双向、全双工通信。对于游戏、即时通讯应用和需要双向实时更新的应用来说,双向通道更具吸引力。然而,在某些场景中,数据不需要从客户端发送。您只需要从一些服务器操作中更新。一些例子包括朋友的状态更新、股票行情、新闻提要或其他自动数据推送机制(例如更新客户端Web SQL数据库或IndexedDB对象存储)。如果需要向服务器发送数据,XMLHttpRequest总是一个好朋友。 sse通过传统HTTP发送。这意味着它们不需要特殊的协议或服务器实现就可以工作。另一方面,WebSockets需要全双工连接和新的WebSocket服务器来处理协议。此外,服务器发送事件具有WebSockets设计上所缺乏的各种特性,例如自动重连接、事件id和发送任意事件的能力。
为什么选择服务器发送事件而不是WebSockets?好问题。
sse一直处于阴影中的一个原因是,后来的api(如WebSockets)提供了更丰富的协议来执行双向、全双工通信。对于游戏、即时通讯应用和需要双向实时更新的应用来说,双向通道更具吸引力。然而,在某些场景中,数据不需要从客户端发送。您只需要从一些服务器操作中更新。一些例子包括朋友的状态更新、股票行情、新闻提要或其他自动数据推送机制(例如更新客户端Web SQL数据库或IndexedDB对象存储)。如果需要向服务器发送数据,XMLHttpRequest总是一个好朋友。
sse通过传统HTTP发送。这意味着它们不需要特殊的协议或服务器实现就可以工作。另一方面,WebSockets需要全双工连接和新的WebSocket服务器来处理协议。此外,服务器发送事件具有WebSockets设计上所缺乏的各种特性,例如自动重连接、事件id和发送任意事件的能力。
SSE相对于Websockets的优点:
Websockets相对于SSE的优点:
SSE的理想用例:
上交所陷阱:
据caniuse.com网站报道:
您可以使用仅客户端的polyfill将SSE支持扩展到许多其他浏览器。这在WebSockets中是不太可能的。一些EventSource腻子:
如果你需要支持所有的浏览器,可以考虑使用web-socket-js、SignalR或socket . io这样的库,它们支持多种传输,如WebSockets、SSE、Forever Frame和AJAX长轮询。这些通常也需要对服务器端进行修改。
了解更多关于SSE的信息:
了解更多关于WebSockets的信息:
其他的差异:
有一件事需要注意:我有websockets和企业防火墙的问题。(使用HTTPS有帮助,但并不总是如此)
参见https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software# 0 < / p >
我假设服务器发送事件没有那么多问题。但我不知道。
也就是说,WebSockets非常有趣。我有一个小网页游戏,使用websockets(通过Socket.IO) (http://minibman.com)
Web Sockets -这是一个协议,它在一个TCP连接上提供了一个全双工通信通道。例如,服务器和浏览器之间的双向通信由于协议比较复杂,服务器和浏览器不得不依赖websocket库socket.io
socket.io
Example - Online chat application.
SSE(Server-Sent Event) -在服务器发送事件的情况下,通信仅从服务器到浏览器进行,浏览器不能向服务器发送任何数据。这种通信方式是主要使用的当只需要显示更新的数据时,只要数据更新,服务器就会发送消息。例如,服务器到浏览器之间的单向通信。这个协议不太复杂,所以不需要依赖外部库JAVASCRIPT本身提供了EventSource接口来接收服务器发送的消息
EventSource
Example - Online stock quotes or cricket score website.
它们在语义上有所不同。
Websocket的原生语义是“双向数据流”。
sse的原生语义为“发布-订阅模式”;或者“请求-响应模式,尽管响应是一种流”。
当然你可以实现一层“发布-订阅模式”;或者“req-res pattern”;通过websocket自己。