Mad*_*bæk 780 html5 websocket server-sent-events
双方的WebSockets和服务器发送的事件能够将数据推送到浏览器.对我来说,他们似乎是竞争技术.他们之间有什么区别?你何时会选择一个而不是另一个?
Ale*_*rey 919
Websockets和SSE(服务器发送事件)都能够将数据推送到浏览器,但它们不是竞争技术.
Websockets连接既可以将数据发送到浏览器,也可以从浏览器接收数据.可以使用websockets的应用程序的一个很好的例子是聊天应用程序.
SSE连接只能将数据推送到浏览器.在线股票报价或更新时间表或订阅源的twitters是可以从SSE中受益的应用程序的良好示例.
实际上,由于SSE可以完成的所有事情也可以通过Websockets完成,因此Websockets得到了更多的关注和喜爱,并且更多的浏览器支持Websockets而不是SSE.
但是,对于某些类型的应用程序来说,它可能过度,而后端可能更容易使用SSE等协议实现.
此外,SSE可以填充到旧版浏览器中,只使用JavaScript本身不支持它.可以在Modernizr github页面上找到SSE polyfill的一些实现.
陷阱:
HTML5Rocks有一些关于SSE的好信息.从该页面:
服务器发送事件与WebSockets
为什么要通过WebSockets选择Server-Sent Events?好问题.
SSE一直处于阴影中的一个原因是因为WebSockets等后来的API提供了更丰富的协议来执行双向全双工通信.拥有双向渠道对于游戏,消息应用程序以及需要双向近实时更新的情况更具吸引力.但是,在某些情况下,不需要从客户端发送数据.您只需要从某些服务器操作进行更新.一些示例将是朋友的状态更新,股票行情,新闻源或其他自动数据推送机制(例如,更新客户端Web SQL数据库或IndexedDB对象存储).如果您需要将数据发送到服务器,XMLHttpRequest始终是朋友.
SSE通过传统HTTP发送.这意味着他们不需要特殊的协议或服务器实现来实现工作.另一方面,WebSockets需要全双工连接和新的Web Socket服务器来处理协议.此外,Server-Sent Events具有WebSockets设计缺乏的各种功能,例如自动重新连接,事件ID以及发送任意事件的能力.
SSE优于Websockets的优点:
Websockets优于SSE的优点:
SSE的理想用例:
SSE陷阱:
Dre*_*kes 106
根据caniuse.com:
您可以使用仅客户端的polyfill将SSE的支持扩展到许多其他浏览器.使用WebSockets的可能性较小.一些EventSource polyfill:
如果您需要支持所有浏览器,请考虑使用像web-socket-js,SignalR或socket.io这样的库,它支持多种传输,如WebSockets,SSE,Forever Frame和AJAX长轮询.这些通常也需要修改服务器端.
了解更多关于SSE的信息:
了解有关WebSockets的更多信息:
其他差异:
at5*_*321 42
到了2023年,情况已不再像以前那样了。
几年前,当 IE 仍然拥有相当大的市场份额时,SSE的一个缺点是 IE 完全缺乏本机支持(而IE 10+ 支持WebSockets )。如今,根据caniuse.com 的数据,这两种技术在客户端的支持率几乎相同:WebSockets 的支持率为 98.35%,而SSE 的支持率为 98.03%(这些统计数据适用于全球用户)。
从历史上看,SSE 的一个严重限制,即每个域 6 个连接限制(yourapp.com
在许多浏览器选项卡中打开时出现的问题)对于HTTP/2
. 所有现代浏览器都支持HTTP/2
(全球用户的97.16%),并且在服务器端HTTP/2+
也超越了HTTP/1
过去几年。
在 SSE 和 WebSocket 之间进行选择时需要考虑多种因素:
curl
可以使用简单的)。Yaf*_*fle 15
Opera,Chrome,Safari支持SSE,Chrome,Safari支持SSE内部的SharedWorker Firefox支持XMLHttpRequest readyState交互,因此我们可以为Firefox制作EventSource polyfil
它们在语义上是不同的。
websocket 具有“双向数据流”的原生语义含义。
而 sse 具有“发布-订阅模式”或“请求-响应模式,尽管响应是流”的本机语义含义。
当然你可以自己在websocket上实现一层“pub-sub模式”或“req-res模式”。
小智 7
Web套接字 -它是一种通过单个TCP连接提供全双工通信通道的协议.例如,服务器和浏览器之间的双向通信由于协议更复杂,服务器和浏览器必须依赖websocket库,这是socket.io
Example - Online chat application.
Run Code Online (Sandbox Code Playgroud)
SSE(服务器发送事件) -
在服务器发送事件的情况下,通信仅从服务器到浏览器执行,浏览器不能向服务器发送任何数据.这种通信主要在需要显示更新数据时使用,然后服务器在数据更新时发送消息.例如,服务器到浏览器之间的单向通信.这个协议不太复杂,所以不需要依赖外部库JAVASCRIPT本身提供EventSource
接收服务器发送消息的接口.
Example - Online stock quotes or cricket score website.
Run Code Online (Sandbox Code Playgroud)
需要注意的一件事:
我遇到了 websockets 和公司防火墙的问题。(使用 HTTPS 有帮助,但并非总是如此。)
见https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software https://github.com/sockjs/sockjs-client/issues/94
我认为服务器发送的事件没有那么多问题。但我不知道。
也就是说,WebSockets 非常有趣。我有一个使用 websockets 的小网络游戏(通过 Socket.IO)(http://minibman.com)
归档时间: |
|
查看次数: |
188664 次 |
最近记录: |