前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >HTML5 SSE 浏览器发送事件

HTML5 SSE 浏览器发送事件

作者头像
很酷的站长
发布于 2023-11-20 00:23:48
发布于 2023-11-20 00:23:48
31200
代码可运行
举报
运行总次数:0
代码可运行

在远古时代,网页大都是静态展示,服务器无需处理复杂且过多的请求,只需要静静地等待客户端的请求,将 HTML 代码通过 HTTP 的方式返回给客户端。因此服务器也没有主动推送数据给客户端的能力,毕竟 HTTP 是无状态的协议,即开即用。

后来随着互联网的发展,服务端有一些即时消息需要立即展示给客户端,早期的处理方式是通过客户端定时发起 HTTP 请求,这种方式命中率较低且浪费服务端资源。现在有了 HTML5 之后不需要那么麻烦了,可以使用 websocket 或者 SSE。SSE 全称 server-sent events 单项消息传递事件,相对于 websocket 这种双向协议,SSE 较为轻量,它只支持服务端向客户端推送消息。

1. 使用方式

1.1 创建实例

通过新建一个 sse 对象可以创建一个 SSE 实例,但是不要忘记检测浏览器的支持情况:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(typeof(EventSource)!=="undefined"){    var source = new EventSource("http://127.0.0.1/test.php");
}

上述示例实现了一个创建 SSE 对象的功能,创建之前需要检测是否支持,目前 IE 之外的大部分浏览器都支持 SSE。sse 对象只有一个初始化参数,用于指定服务器的 url。

1.2 接收消息

创建实例成功之后,通过监听 message 事件来实时获取服务端的消息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
source.onmessage = function (event){    //处理业务请求
    console.log(event.data)
}

1.3 服务端支持

服务器端需要对客户端发起的 HTTP 请求做相应的回复,主要是将 HTTP 报文头的 content-type 字段设置成 text/event-stream,下边以 PHP 举例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
header('content-type:text/event-stream');while(true){
    sleep(30000);    echo "message:".time();    //每隔半分钟返回一个时间戳}

1.4 其他事件

除了监听 message 事件用于获取服务端的数据之外,还有 open 事件用于监听连接打开的状态, error 事件用于监听错误信息。

2. 几种常用的客户端-服务器消息传递方式

  • http 最常用的协议,用于客户端主动向服务器发送请求,单向传递;
  • ajax HTTP 的扩展版,底层还是 HTTP 协议,只不过客户端是无刷新的;
  • comet 也是基于 HTTP 封装的,使用 HTTP 长连接的方式,原理大致是将 HTTP 的timeout 设置较长,服务器有数据变化时返回数据给客户端,同时断开连接,客户端处理完数据之后重新创建一个 HTTP 长连接,循环上述操作(这只是其中一种实现方式);
  • websocket 这是 HTML5 中的新标准,基于 socket 的方式实现客户端与服务端双向通信,需要浏览器支持 HTML5;
  • Adobe Flash Socket 这个也是使用 socket 的方式,需要浏览器支持 flash 才行,为了兼容老版本的浏览器;
  • ActiveX object 只适用于 IE 浏览器; 目前尚没有一种方式能兼容所有的浏览器,只能针对软件的目标客户人群做一定的兼容。
  • sse 服务端单向推送。

3. 适用场景

并非所有场景都适合使用 sse 处理,在消息推送接收不频繁的情况下选用 ajax 轮询或者 sse 或者 websocket 其实差别不太大。sse 应该适用于服务端向客户端发送消息频繁而客户端几乎无需向服务端发送数据的场景下,例如:

  • 新邮件通知;
  • 订阅新闻通知;
  • 天气变化;
  • 服务器异常通知;
  • 网站公告;
  • 等等。

sse 的优缺点:

  • SSE 使用 HTTP 协议,除 IE 外的大部分浏览器都支持;
  • SSE 属于轻量级,使用简单;
  • SSE 默认支持断线重连;
  • SSE 一般只用来传送文本,二进制数据需要编码后传送;
  • SSE 支持自定义发送的消息类型。

4. 总结

本章介绍了 websocket 的轻量级版本 sse 协议,简述了 sse 协议的使用方法,对比了其他网页中常用的消息推送方式以及他们的优缺点,这些协议涵盖了大部分的使用场景,选用适合的协议类型可以避免不必要的资源和性能消耗。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
09. Springboot集成sse服务端推流
如果项目中有一个场景,假设对接ChatGPT或对接天气类接口的时候,需要服务端主动往客户端进行消息推送或推流。通常的做法有:
有一只柴犬
2024/01/28
8K0
09. Springboot集成sse服务端推流
Comet,SSE,WebSocket前后端的实现
Comet(服务器推送)的两种方式 短轮询 页面定时向服务器发送请求, 步骤为:建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接 //前端js var xhr = new XMLHttpRequest(); setInterval(()=>{ xhr.onreadystatechange = function () { if (xhr.readyState == 4) { let result = xhr.responseText
chuchur
2022/10/25
8310
SSE 服务器发送事件
众所周知,在 HTTP 协议中,服务器无法向浏览器推送信息,可以使用 WebSocket 来实现两者双向通信。而在这里所要介绍的是 SSE(Server-Sent Events),在浏览器向服务器请求后,服务器每隔一段时间向客户端发送流数据(是单向的),来实现接收服务器的数据,例如在线视频播放,和像上面所演示的效果。
愧怍
2022/12/27
1.6K0
SSE 服务器发送事件
精通服务器推送事件(SSE)与 Python 和 Go 实现实时数据流 🚀
在当今的互动型 Web 应用程序中,实时数据更新在提升用户体验方面起着至关重要的作用。无论是实时股票更新、即时聊天消息,还是流式评论,实时数据流都是不可或缺的。在各种可用于实时通信的技术中,服务器推送事件(SSE)作为一种广泛使用且高效的解决方案脱颖而出。SSE 允许服务器通过 HTTP 向客户端推送实时更新,提供了一种轻量且高效的方式。
用户11531559
2025/03/21
1360
利用SSE服务器主动向浏览器端发送消息
我们知道我们可以利用WebSocket实现服务端给客户端主动发送消息,SEE跟WebScoket也一样,可以实现服务端给客户端主动发送消息,但各有不同,如果你只要单向传输的时候,其实SSE更方便使用。
javascript.shop
2020/09/07
3.2K0
利用SSE服务器主动向浏览器端发送消息
SSE技术详解:使用 HTTP 做服务端数据推送应用的技术
 SSE ( Server-sent Events )是 WebSocket 的一种轻量代替方案,使用 HTTP 协议。
用户7353950
2022/05/10
8.8K0
SSE技术详解:使用 HTTP 做服务端数据推送应用的技术
为什么ChatGPT采用SSE协议而不是Websocket?
在探索ChatGPT的使用过程中,我们发现GPT采用了流式数据返回的方式。理论上,这种情况可以通过全双工通信协议实现持久化连接,或者依赖于基于EventStream的事件流。然而,ChatGPT选择了后者,也就是本文即将深入探讨的SSE(Server-Sent Events)技术。
程序新视界
2023/12/30
2.7K0
为什么ChatGPT采用SSE协议而不是Websocket?
SSE技术详解:一种全新的HTML5服务器推送事件技术
一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询、Comet技术、WebSocket技术、SSE(Server-sent Events)。关于这4种技术方式的优缺点,请参考《Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE》。本文将专门讲解SSE技术。
JackJiang
2018/08/23
4.7K0
SSE技术详解:一种全新的HTML5服务器推送事件技术
你还在使用 WebSocket 实现实时消息推送吗?
在很久很久以前,前端一般使用轮询来进行服务端向客户端进行消息的伪推送,为什么说轮询是伪推送?因为轮询本质上还是通过客户端向服务端发起一个单项传输的请求,服务端对这个请求做出响应而已。通过不断的请求来实现服务端向客户端推送数据的错觉。并不是服务端主动向客户端推送数据。
良月柒
2024/04/15
2560
你还在使用 WebSocket 实现实时消息推送吗?
重学Springboot系列之服务器推送技术
若干年前,所有的请求都是由浏览器端发起,浏览器本身并没有接受请求的能力。所以一些特殊需求都是用ajax轮询的方式来实现的。比如:
大忽悠爱学习
2021/12/07
2.3K0
重学Springboot系列之服务器推送技术
Spring WebFlux之SSE服务器发送事件
ChatGPT 刚出的时候,让大伙很好奇的是它是如何实现的逐字输出的?答案就是 SSE (服务器发送事件)。随着实时数据和响应式编程的需求不断增加,服务器发送事件(Server-Sent Events,简称 SSE)在现代 Web 应用程序中越来越受欢迎。SSE 提供了一种轻量级的服务器推送数据给客户端的方式,适合用于监控、实时通知、股票价格更新等场景。
CoderJia
2024/10/27
4050
SSE(Server-Sent Events):替代websocket完成服务器推送
提到服务端数据推送,你可以一下子就想到了Websocket,WebSocket是一种全新的协议,随着HTML5草案的不断完善,越来越多的现代浏览器开始全面支持WebSocket技术了,它将TCP的Socket(套接字)应用在了webpage上,从而使通信双方建立起一个保持在活动状态连接通道。
品茗IT
2020/12/09
4.2K0
SSE(Server-Sent Events):替代websocket完成服务器推送
消息推送技术,除了websocket还知道那些?
WebSocket是一种网络通信协议,它提供了在单个TCP连接上进行全双工通信的能力。这意味着数据可以在客户端和服务器之间双向流动,而无需客户端通过轮询或重复请求来获取更新。
老K博客
2024/06/01
7180
消息推送技术,除了websocket还知道那些?
传统轮询、长轮询、服务器发送事件与WebSocket
构建网络应用的过程中,我们经常需要与服务器进行持续的通讯以保持双方信息的同步。通常这种持久通讯在不刷新页面的情况下进行,消耗一定的内存资源常驻后台,并且对于用户不可见。本文将简要介绍Web通信中常用的四种方式。
kirin
2021/05/08
3K0
SSE请求多种实现方式总结(干货分享)
SSE(Server-Sent Events)是一种用于实现服务器主动向客户端推送数据的技术,也被称为“事件流”(Event Stream)。它基于 HTTP 协议,利用了其长连接特性,在客户端与服务器之间建立一条持久化连接,并通过这条连接实现服务器向客户端的实时数据推送。
用户10501441
2024/11/24
1.9K0
AI大模型文本流如何持续吐到前端,服务端实时通信技术 SSE(Server-Sent Events) 认知
99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完事情,战胜焦虑,战胜那些心里空荡荡的时刻,而不是选择逃避。不要站在原地想象困难,行动永远是改变现状的最佳方式
山河已无恙
2025/02/25
1620
AI大模型文本流如何持续吐到前端,服务端实时通信技术 SSE(Server-Sent Events) 认知
网页端IM通信技术快速入门:短轮询、长轮询、SSE、WebSocket
对Web端即时通讯技术熟悉的开发者来说,我们回顾网页端IM的底层通信技术,从短轮询、长轮询,到后来的SSE以及WebSocket,使用门槛越来越低(早期的长轮询Comet这类技术实际属于hack手段,使用门槛并不低),技术手段越来越先进,网页端即时通讯技术的体验也因此越来越好。
JackJiang
2021/05/25
1.6K0
服务器端实时推送技术之SSE
在讲Server-Sent Events (SSE) 之前,我们先来看看 HTTP 请求- 响应。一个标准的 HTTP 请求- 响应,需要客户端打开一个连接,将一个 HTTP 请求(如 HTTP GET 请求)发送到服务端,然后接收到 HTTP 回来的响应,如果该响应被完全发送或者接收,服务端就会把连接关闭。通常是由某个客户发起,客户端才会需要请求所有数据。
kinbug [进阶者]
2020/06/27
3.7K0
服务器端实时推送技术之SSE
【Python系列】浅析流式模式:基于 SSE 的实时响应体验
在现代 Web 应用开发中,用户体验的优化是一个非常重要的目标,尤其是在涉及到实时数据更新的场景下。流式模式(Streaming Mode)作为一种高效的数据传输方式,能够让用户以打字机输出的形式获得流式返回的效果。这种方式通过 Server-Sent Events (SSE) 技术实现,带来了独特的用户体验。
kwan的解忧杂货铺
2024/11/16
2940
干货 | 长连接/websocket/SSE等主流服务器推送技术比较
作者简介 本文由携程市场营销研发部武艺嫱和王宇星以及张子祥共同撰写,武艺嫱在市场营销研发部负责前端,王宇星和张子祥在市场营销研发部负责java后端。 最近做的某个项目有个需求,需要实时提醒client端有线上订单消息。所以保持客户端和服务器端的信息同步是关键要素,对此我们了解了可实现的方式。本文将介绍web常用的几种方式,希望给需要服务器端推送消息的同学在选型上有一点启发。 一、推送技术常用的集中实现的实现方式 1.1 短连接轮询: 前端用定时器,每间隔一段时间发送请求来获取数据是否更新,这种方式可兼容i
携程技术
2018/03/16
3.7K0
干货 | 长连接/websocket/SSE等主流服务器推送技术比较
推荐阅读
相关推荐
09. Springboot集成sse服务端推流
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文