WebSockets和服务器发送事件都能够将数据推送到浏览器。 在我看来,它们似乎是竞争技术。 它们之间有什么区别? 您何时会选择一个?


#1楼

根据caniuse.com:

  • 96%的全球用户本机支持WebSockets
  • 全球用户中有92%本地支持服务器发送的事件

您可以使用仅客户端的polyfill将对SSE的支持扩展到许多其他浏览器。 WebSockets不太可能这样。 一些EventSource polyfills:

  • Remy Sharp的EventSource ,没有其他库依赖项(IE7 +)
  • Rick Waldron的jQuery.EventSource
  • Yaffle的 EventSource (替换本机实现,跨浏览器规范行为)

如果需要支持所有浏览器,请考虑使用诸如web-socket-js , SignalR或socket.io之类的库,该库支持多种传输方式,例如WebSockets,SSE,Forever Frame和AJAX长轮询。 这些通常也需要修改服务器端。

从以下位置了解有关SSE的更多信息:

  • HTML5 Rocks文章
  • W3C规范( 已发布的版本 , 编辑的草稿 )

从以下位置了解有关WebSocket的更多信息:

  • HTML5 Rocks文章
  • W3C规范( 已发布的版本 , 编辑的草稿 )

其他差异:

  • WebSockets支持任意二进制数据,SSE仅使用UTF-8

#2楼

需要注意的一件事:
我在使用websocket和公司防火墙时遇到了问题。 (使用HTTPS有帮助,但并非总是如此。)

参见https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software https://github.com/sockjs/sockjs-client/issues/94

认为服务器发送事件没有太多问题。 但是我不知道。

就是说,WebSocket充满乐趣。 我有一个使用websockets的小型网络游戏(通过Socket.IO)( http://minibman.com )


#3楼

这里讨论Web套接字和服务器发送事件之间的区别。 从Java EE 7开始, WebSocket API已成为规范的一部分,并且服务器发送的事件似乎将在企业版的下一版本中发布。


#4楼


Websocket VS SSE


Web套接字-这是一个协议,可通过单个TCP连接提供全双工通信通道。 例如,服务器和浏览器之间的双向通信由于协议更加复杂,因此服务器和浏览器必须依赖于socket.io的websocket库。

Example - Online chat application.

SSE(服务器发送事件)-如果发生服务器发送事件,则仅在服务器与浏览器之间进行通信,而浏览器无法向服务器发送任何数据。 这种通信主要在只需要显示更新的数据时使用,然后只要数据更新,服务器就会发送消息。 例如,服务器与浏览器之间的单向通信。 该协议不太复杂,因此不需要依赖外部库JAVASCRIPT本身提供了EventSource接口来接收服务器发送的消息。

Example - Online stock quotes or cricket score website.

#5楼

最大连接限制不是http2 + sse的问题。

这是http 1上的问题


#6楼

Opera,Chrome,Safari支持SharedWorker内的SSE,Chrome,Safari支持SSE Firefox支持XMLHttpRequest readyState交互,因此我们可以为Firefox创建EventSource polyfil


#7楼

Websocket和SSE(服务器发送事件)都能够将数据推送到浏览器,但是它们不是竞争技术。

Websockets连接既可以将数据发送到浏览器,也可以从浏览器接收数据。 可以使用websockets的应用程序的一个很好的例子是聊天应用程序。

SSE连接只能将数据推送到浏览器。 在线股票报价或Twitter的更新时间表或供稿是可以从SSE中受益的应用程序的很好示例。

实际上,由于SSE可以完成的所有事情也都可以通过Websockets完成,因此Websockets得到了更多的关注和喜爱,并且与SSE相比,更多的浏览器支持Websockets。

但是,对于某些类型的应用程序来说,它可能会显得过大,并且使用诸如SSE之类的协议可以更轻松地实现后端。

此外,可以将SSE填充到不仅使用JavaScript本身不支持它的旧版浏览器中。 可以在Modernizr github页面上找到SSE polyfills的一些实现。

陷阱:

  • SSE受最大打开连接数的限制,这在打开各种选项卡时会特别痛苦,因为该限制是针对每个浏览器的,并且设置为一个非常低的数字(6)。 该问题在Chrome和Firefox中被标记为“无法解决”
  • 只有WS可以传输二进制数据和UTF-8,而SSE限于UTF-8。 (感谢Chado Nihi)。
  • 某些具有数据包检查功能的企业防火墙在处理WebSocket(Sophos XG防火墙,WatchGuard,McAfee Web Gateway)时遇到问题。

HTML5Rocks在SSE上有一些很好的信息。 从该页面:

服务器发送的事件与WebSockets

您为什么选择通过WebSockets发送服务器发送的事件? 好问题。

将SSE保留在阴影中的原因之一是因为后来的API(如WebSocket)提供了更丰富的协议来执行双向全双工通信。 对于游戏,消息传递应用程序以及需要双向双向近乎实时更新的情况,拥有双向通道更具吸引力。 但是,在某些情况下,不需要从客户端发送数据。 您只需要某些服务器操作的更新即可。 一些示例是朋友的状态更新,股票行情自动收录器,新闻提要或其他自动数据推送机制(例如,更新客户端Web SQL数据库或IndexedDB对象存储)。 如果您需要将数据发送到服务器,则XMLHttpRequest始终是朋友。

SSE通过传统的HTTP发送。 这意味着它们不需要特殊的协议或服务器实现即可正常工作。 另一方面,WebSockets需要全双工连接和新的Web Socket服务器来处理协议。 另外,服务器发送的事件具有WebSocket设计上缺少的各种功能,例如自动重新连接,事件ID和发送任意事件的功能。


TLDR摘要:

SSE相对于Websockets的优势:

  • 通过简单的HTTP而不是自定义协议进行传输
  • 可以用JavaScript进行多填充,以将SSE“反向移植”到尚不支持的浏览器。
  • 内置对重新连接和事件ID的支持
  • 更简单的协议
  • 公司防火墙进行数据包检查没有问题

Websockets相对于SSE的优势:

  • 实时,双向通讯。
  • 在更多浏览器中的本机支持

SSE的理想用例:

  • 股票行情自动收录
  • Twitter提要更新
  • 通知浏览器

SSE陷阱:

  • 没有二进制支持
  • 最大开放连接数限制

WebSockets与服务器发送的事件/ EventSource相关推荐

  1. jax-rs jax-ws_迟来总比没有好:SSE或服务器发送的事件现在已在JAX-RS中

    jax-rs jax-ws 服务器发送的事件 (或简称为SSE )是非常有用的协议,它允许服务器通过HTTP将数据推送到客户端. 这是我们的Web浏览器支持的年龄,但是令人惊讶的是, JAX-RS规范 ...

  2. 迟来总比没有好:SSE或服务器发送的事件现在已在JAX-RS中

    服务器发送的事件 (或简称为SSE )是非常有用的协议,它允许服务器通过HTTP将数据推送到客户端. 这是我们的网络浏览器支持的年龄,但令人惊讶的是, JAX-RS规范在很长一段时间内都忽略了这一点. ...

  3. rxjava 循环发送事件_使用RxJava和SseEmitter进行服务器发送的事件

    rxjava 循环发送事件 Spring Framework 4.2 GA即将发布,让我们看一下它提供的一些新功能. 引起我注意的一个事件是一个简单的新类SseEmitter ,它是对Spring M ...

  4. 使用RxJava和SseEmitter进行服务器发送的事件

    Spring Framework 4.2 GA即将发布,让我们看一下它提供的一些新功能. 引起我注意的一个事件是一个简单的新类SseEmitter ,它是对Spring MVC控制器中易于使用的发送事 ...

  5. HTML5支持服务器发送事件

    来源 传统的WEB应用程序通信时的简单时序图: 现在Web App中,大都有Ajax,是这样子: HTML5有一个Server-Sent Events(SSE)功能,允许服务端推送数据到客户端.(通常 ...

  6. HTML5支持服务器发送事件(Server-Sent Events)-单向消息传递数据推送(C#示例)

    传统的WEB应用程序通信时的简单时序图: 现在Web App中,大都有Ajax,是这样子: HTML5有一个Server-Sent Events(SSE)功能,允许服务端推送数据到客户端.(通常叫数据 ...

  7. java sse spring_【SpringBoot WEB 系列】SSE 服务器发送事件详解

    SSE 全称Server Sent Event,直译一下就是服务器发送事件,一般的项目开发中,用到的机会不多,可能很多小伙伴不太清楚这个东西,到底是干啥的,有啥用 本文主要知识点如下: SSE 扫盲, ...

  8. HTML5 服务器推送事件(Server-sent Events)实战开发

    对于一般的 Web 应用开发,大多数开发人员并不陌生.在 Web 应用中,浏览器和服务器之间使用的是请求 / 响应的交互模式.浏览器发出请求,服务器根据收到的请求来生成相应的响应.浏览器再对收到的响应 ...

  9. sql server无法绑定由多个部分组成的标识符_HTML5服务器推送事件(Server-sent-event)...

    在前端开发中,实现界面推送的方式,这里大概总结下三种方式 轮询(ajax),比较耗费服务器资源.COMET方式(COMET 技术并不是 HTML 5 ) websocket 双向数据推送,灵活,功能强 ...

最新文章

  1. Serverless特点及应用
  2. saltstack一些常用模块和api调用方法
  3. JBoss下布署Spring2.5和Struts2系统
  4. Android四大组之ContentProvider
  5. 18岁学计算机专业好不好,我18岁,学计算机编程,请问有没有什么书或者方法可以提高记忆力的?...
  6. c++ winpcap开发(4)
  7. LeetCode 696. Count Binary Substrings
  8. Redis数据结构之哈希
  9. VMvare桥接网络连接不上解决办法
  10. python可选参数定义_Python中函数的参数定义和可变参数用法实例分析
  11. 金蝶云星空python二开根据物料旧编码链接物料编码做单据
  12. 三节锂电池充电芯片,IC设计模块的几种电路
  13. 2022西工大网络安全知识竞赛赛后回顾资料
  14. 阴阳日历转换 公历日期转农历 八字排日柱算法
  15. svg绘制蝌蚪状飞线
  16. Java学习lesson 10
  17. 用python写字动画_Duang!用Python来实现唱歌、跳舞、写字、画画?无所不能的pyt
  18. 键盘的Win键失效或者被锁的解决办法
  19. sqlite3数据库的使用及其对应的API函数接口的使用
  20. IT行业三大热门专业,就业容易工资高,人才缺口比较大

热门文章

  1. 在editor模式下遍历unity3d builtsetting中的场景
  2. PHP数组合并的常见问题
  3. dubbox开发rest+json指南【转】
  4. SqlServer中char,varchar,nchar,nvarchar的区别
  5. 用HQL进行实体查询
  6. Net设计模式实例之组合模式(Composite Pattern)(3)
  7. 创建一个新的extender
  8. CCF CSP 201604-1 折点计数
  9. 虹软2.0 离线人脸识别 Android 开发 Demo
  10. Oracle Restart能够用来给Oracle GoldenGate 做 High Availability 使用么?