`
- 浏览:
2885 次
- 性别:
- 来自:
南京
-
HTML5 服务器推送事件(Server-sent Events)简介
在 Web 应用中,浏览器和服务器之间使用的是请求 / 响应的交互模式。浏览器发出请求,服务器根据收到的请求来生成相应的响应。浏览器再对收到的响应进行处理,展现给用户。响应的格式可能是 HTML、XML 或 JSON 等。随着 REST 架构风格和 AJAX 的流行,服务器更多地使用 JSON 作为响应的数据格式。Web 应用使用 XMLHttpRequest 对象来发送请求,并根据服务器端返回的数据,对页面的内容进行动态更新。由 XMLHttpRequest 对象来发出请求,得到服务器响应之后进行页面的局部更新。这种方式的不足之处在于:服务器端产生的数据变化不能及时地通知浏览器,而是需要等到下次请求发出时才能被浏览器获取。对于某些对数据实时性要求很高的应用来说,这种延迟是不能接受的。
为了满足这类应用的需求,就需要有某种方式能够从服务器端推送数据给浏览器,以保证服务器端的数据变化可以在第一时间通知给用户。目前常见的解决办法有不少,主要可以分成两类。这两类方法的区别在于是否基于 HTTP 协议来实现。不使用 HTTP 协议的做法是使用 HTML 5 新增的 WebSocket 规范,而使用 HTTP 协议的做法则包括简易轮询、COMET 技术和本文中要介绍的 HTML 5 服务器推送事件。下面会对这几种技术进行介绍。
一、WebSocket
WebSocket 规范是 HTML 5 中的一个重要组成部分,已经被很多主流浏览器所支持,也有不少基于 WebSocket 开发的应用。正如名称所表示的一样,WebSocket 使用的是套接字连接,基于 TCP 协议。使用 WebSocket 之后,实际上在服务器端和浏览器之间建立一个套接字连接,可以进行双向的数据传输。WebSocket 的功能是很强大的,使用起来也灵活,可以适用于不同的场景。不过 WebSocket 技术也比较复杂,包括服务器端和浏览器端的实现都不同于一般的 Web 应用。
二、简易轮询
浏览器端定时向服务器端发出请求,来查询是否有数据更新。这种做法比较简单,可以在一定程度上解决问题。不过对于轮询的时间间隔需要进行仔细考虑。轮询的间隔过长,会导致用户不能及时接收到更新的数据;轮询的间隔过短,会导致查询请求过多,增加服务器端的负担。
三、COMET
COMET 技术改进了简易轮询的缺点,使用的是长轮询。长轮询的方式在每次请求时,服务器端会保持该连接在一段时间内处于打开状态,而不是在响应完成之后就立即关闭。这样做的好处是在连接处于打开状态的时间段内,服务器端产生的数据更新可以被及时地返回给浏览器。当上一个长连接关闭之后,浏览器会立即打开一个新的长连接来继续请求。不过 COMET 技术的实现在服务器端和浏览器端都需要第三方库的支持。
四、服务器发送事件(server-sent event)
server-sent event即服务器单向消息传递事件,网页可以自动获取来自服务器的更新。以前也可能做到这一点,前提是网页不得不询问是否有可用的更新。通过服务器发送事件,更新能够自动到达。如:Facebook/Twitter 更新、估价更新、新的博文、赛事结果等。所有主流浏览器均支持服务器发送事件,除了 Internet Explorer。
综合比较上面提到的 4 种不同的技术,简易轮询由于其本身的缺陷,并不推荐使用。COMET 技术并不是 HTML 5 标准的一部分,从兼容标准的角度出发,也不推荐使用。WebSocket 规范和服务器推送技术都是 HTML 5 标准的组成部分,在主流浏览器上都提供了原生的支持,是推荐使用的。不过 WebSocket 规范更加复杂一些,适用于需要进行复杂双向数据通讯的场景。对于简单的服务器数据推送的场景,使用服务器推送事件就足够了。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
服务器推送事件(Server-sent Events)是基于WebSocket 协议的一种服务器向客户端发送事件&数据的单向通讯。目前所有主流浏览器均支持服务器发送事件,当然除了 Internet Explorer 。2333… WebSocket 协议是继HTTP...
这样,即使在页面加载后,浏览器也能接收到服务器推送的新数据。 在压缩包中的文件“ServerSent”,可能包含了实现SSE功能的核心代码,比如Controller的实现,Repository的接口,以及可能的实体类定义。这些文件...
在IT行业中,服务端消息推送(Server-Sent Events,简称SSE)是一种高效且实时的通信技术,允许服务器主动向客户端发送数据,而无需客户端频繁发起请求。这种单向推送机制在实时应用如股票更新、在线聊天、实时通知...
服务器端可以随时将事件推送给客户端,客户端通过监听事件来接收这些数据。 ChatGPT的Server-sent events应用 首先打开ChatGPT网页端,随便问一个问题,然后进入网络选单,清空历史请求记录后,进行网络抓包监听: ...
Server-Sent Events是HTML5引入的一个强大特性,它简化了实时数据推送的实现,减少了不必要的网络通信,提高了实时应用的效率。对于需要实时更新的Web应用,Server-Sent Events是一个理想的选择。
一旦在客户端和Web Flow服务器之间建立了安全连接,除非有必要,否则它将使用来自Kafka主题的消息并异步推送数据,而无需关闭与客户端的连接。 使用Reactive Kafka看一下Spring WebFlux上的这个。
在C# .NET环境中实现服务器推送,有多种方法,如WebSocket、SignalR、Server-Sent Events (SSE)等。下面将详细介绍这些技术: 1. WebSocket: WebSocket提供全双工通信,允许服务器和客户端双向传输数据。在C#中,...
一个简单高效的库通过PHP实现了HTML5的服务器发送的事件,用于将事件从服务器实时推送到客户端,并且比Websocket更容易,而不是AJAX请求。 要求 PHP 5.4或更高版本 通过Composer( )安装 composer require " hhxsv5...
服务器发送事件(Server-Sent Events,简称SSE)是一种允许服务器向客户端实时推送数据的技术,主要应用于单向数据流场景,比如实时股票更新、在线聊天、动态新闻等。与WebSocket不同,SSE使用HTTP长连接,由服务器...
3. **EventSource/SSE(Server-Sent Events)**:这是一种单向的推送机制,服务器可以将事件以文本流的形式持续发送到客户端。与WebSocket相比,SSE更简单,但只能从服务器向客户端推送数据。 在"comet_broadcast.a...
为了解决这个问题,HTML5引入了服务器推送事件(Server-Sent Events,SSE)和WebSocket两种技术。 WebSocket是一种基于TCP协议的双向通信规范,它允许服务器和客户端之间持续保持连接,实现低延迟的数据交换。然而...
这种技术通常被称为“服务器推送”(Server-Sent Events, SSE)或“Comet”技术。本项目利用了Comet4J这一第三方库来实现这一功能,下面将详细讲解其原理和实现方式。 Comet4J是一个基于Java的服务器推送框架,它...
【服务器推送技术】 服务器推送技术是一种网络通信模式,它与传统的客户端请求、服务器响应的HTTP协议有所不同。在传统的HTTP协议中,客户端(如浏览器)需要主动向服务器发送请求获取数据,而服务器推送技术则允许...
以下是对标题和描述中涉及的.NET实现Server Push(服务器推送)源码的详细解释: 首先,`ServerPush.sln`是一个Visual Studio解决方案文件,它包含了项目的所有配置和依赖关系。当你打开这个文件时,Visual Studio...
【ServerPush(服务器推送)】 在Web开发中,服务器推送(Server Push)是一种技术,它允许服务器主动将数据发送到客户端,而无需等待客户端的请求。这种机制打破了传统的HTTP协议的请求-响应模型,提高了实时性和...
django-monitio 允许你有消息(通知)之后: 可以被保存(存储在数据库中,可以...django-monitio 使用了HTML5中的服务器'推送'技术--Server-Sent Events,可以实时地、动态地推送消息给用户。 标签:django
(SSE)是一种规范,用于通过普通的HTTP对Web前端应用程序实施服务器端推送事件。 与最好的对比是 ,它通过自定义协议提供全双工消息通道,在单个TCP连接中(带有HTTP兼容的握手)进行操作。 设置 克隆项目并执行...
首先介绍如何基本地使用ServerSentEvent。Spring提供了一个`SseEmitter`类,该类可以返回一个Content-Type为`text/event-stream`的HTTP响应。 在开始之前,需要为Spring添加同步支持。可以通过编辑web.xml来实现这...
在提供的链接中,博客作者详细介绍了如何在ASP.NET环境中配置和使用SignalR,包括创建Hub、初始化客户端连接以及如何进行服务器推送。如果你想要进一步学习和实践SignalR,这个资源会是一个很好的起点。通过SignalR...