小而美的服务端推送技术SSE之理论与实战(含demo)

[[toc]]

SSE 是什么?

基本特点

  • SSE: Server-Sent Events
  • 用途: 服务器向浏览器推送信息, 注意反过来不行
  • 本质: 基于http协议的服务端推送技术
  • 特点: 响应头mimetype 为 text/event-stream, keep connection open
  • 数据: 流信息(streaming),数据流不是一次性数据包,会连续不断发送,比如 视频播放
  • 通信: 以流信息方式,完成一次用时很长的下载
  • 缓存: SSE会丢弃已经处理过的数据,不会缓存,而XHR会缓存

历史

  • SSE 首次在 HTML5 规范中提出,于2014 年标准化。
  • HTML5 引入了许多新功能,其中包括 SSE,提供简单有效的服务器到客户端实时通信机制。

EventSource 对象

  • HTML5 引入 EventSource 对象,是 SSE 技术的核心。通过 E
  • ventSource 对象,客户端可以与服务器建立连接,并监听服务器的事件。
  • 这些事件可以是来自服务器的各种数据,如通知、更新或其他信息。

MIMI:text/event-stream

  • 用于服务器向客户端推送消息、事件和通知的数据格式,属于HTML5的一部分
  • text/event-stream将消息视为一系列流事件,以文本形式发送
  • 该格式适用于SSE应用程序,服务器向客户端单向推送数据
  • 关键字: stream 表示这是数据流, text 表示数据流以文本形式传送

限制:

  • SSE 适用于单向通信,从服务器向客户端发送数据。
  • 对于需要双向通信的应用程序,WebSocket 技术通常更合适。

SSE是如何保持http长连接?

  • SSE的本质其实是一个HTTP的长连接
  • 服务端给客户端发送的不是一次性的数据包,而是一个stream流,格式为text/event-stream。
  • 由于是stream流,所以客户端不会关闭连接,会一直等着服务器发送新数据流,
  • 视频播放就是这样的例子

Content-Type: text/event-stream 响应头

  • 告诉浏览器使用SSE的协议来解析响应,并按照SSE规范处理收到的事件数据。
  • 浏览器会将每个事件分解为适当的事件对象,对其进行处理和展示。

[注意]这里说的长连接

  • 不是指 http1.1 的长连接(多个http对应1个tcp连接)
  • 而是值 http 这个连接本身的长连接 (每次返回部分数据后, http连接没有断开)

普通http请求和sse对比

  • 普通http:客户端发起请求,服务端响应,然后一次请求完毕
  • sse: 客户端发起请求,连接一直保持,服务端有数据就可以返回数据给客户端

SSE和WS对比

  • 通信: SSE 单向通道(当连接断开时,客户端无法通知服务端), 只能服务器向浏览器发送, WS 全双工通道, 更强大和灵活
  • 协议: SSE 使用 HTTP 协议, WS 是Http+WebSocket协议
  • 使用: SSE 轻量,使用简单;WS 相对复杂
  • 断线: SSE 默认支持断线重连,WS 需要自己实现
  • 数据: SSE 一般只用来传送文本,WS 默认支持传送二进制数据

WS通信过程

  1. 通过 http 切换协议,服务端返回 101 状态码后,代表协议切换成功。
  2. WebSocket 开始数据通信,一方可以随时向另一方推送消息。

SSE通信过程

  1. 客户端通过 http 发起请求
  2. 服务端可以多次返回内容,连接一直保持

Snipaste_2023-10-28_21-01-06

适合哪些场景?

  • 需要实时数据传输的场景中特别有用
  • 如社交媒体更新、实时新闻、股票市场报价、在线游戏和协作工具等。

CICD 平台

  • 日志实时打印
  • 明显需要一段一段的传输
  • 一般就是用 SSE 来推送数据

ChatGPT

  • 回答一个问题不是一次性给你全部的,而是一部分一部分的加载回答,这也是基于 SSE
  • 查看请求 https://chat.openai.com/backend-api/conversation
  • 响应头是 Content-Type:text/event-stream; charset=utf-8
  • 并且在打字机方式回复时,可以看到请求响应数据在慢慢增加

webpack hmr

  • webpack热更新需要向浏览器推送信息

是否有跨域限制?

  • 没有限制
  • 跨域时,可以通过 withCredentials 参数指定是否发送cookie

兼容性

  • SSE 技术通常在现代浏览器中受到支持,包括Chrome、Firefox、Safari和Edge等。
  • IE,Opera Mini, 其他浏览器低版本 不支持
  • Firefox 6+, Google Chrome 6+, Opera 11.5+, Safari 5+, Microsoft Edge 79+
    Xnip2022-05-08_15-47-31

demo

// 服务端
// server 
var http = require("http");

http.createServer(function (req, res) {
   
  if (req.url === "/stream") {
   
    res.writeHead(200, {
   
        // MIME类型 不能注释 
        "Content-Type":"text/event-stream", 

        // 3种都可以工作
        "Cache-Control":"no-cache", 
        // "Cache-Control":"public", 
        // "Cache-Control":"max-age=30",    

        // 2种都可以工作
        // "Connection":"keep-alive", 
        "Connection":"close",

        // 本地file方式打开 不能注释
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/120433.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目实战:中央控制器实现(2)-优化Controller,将共性动作抽取到中央控制器

1、FruitController FruitController已经和Web没有关系了,和Web容器解耦,可以脱离Web容器做单元测试 package com.csdn.fruit.controller; import com.csdn.fruit.dto.PageInfo; import com.csdn.fruit.dto.PageQueryParam; import com.csdn.fruit.dto.R…

龙迅LT6911GXC,HDMI 2.1转4 PORT MIPI/LVDS支持分辨率高达8K30HZ

描述: LT6911GXC 是一款面向 VR / 显示应用的高性能 HDMI2.1 至 MIPI 或 LVDS 芯片。 高清遥控器RX作为高清电脑中继器的上游,可与其他芯片的高清电脑TX合作,实现直译台功能。 对于 HDMI2.1 输入,LT6911GXC 可配置为 3/4 通道。 …

上线项目问题——无法加载响应数据

目录 无法加载响应数据解决 无法加载响应数据 上线项目时 改用服务器上的redis和MySQL 出现请求能请求到后端,后端也能正常返回数据,但是在前端页面会显示 以为是跨域问题,但是环境还在本地,排除跨域问题以为是服务器问题&#…

【Linux系统编程十六】:(基础IO3)--用户级缓冲区

【Linux系统编程十六】:基础IO3--用户级缓冲区 一.用户级缓冲区二.缓冲区刷新策略1.验证: 三.缓冲区意义 一.用户级缓冲区 我们首先理解上面的代码,分别使用printf和fprintf,fwrite往1号文件描述符里输出,也就是往显示…

5 Tensorflow图像识别(下)模型构建

上一篇:4 Tensorflow图像识别模型——数据预处理-CSDN博客 1、数据集标签 上一篇介绍了图像识别的数据预处理,下面是完整的代码: import os import tensorflow as tf# 获取训练集和验证集目录 train_dir os.path.join(cats_and_dogs_filter…

3.4、Linux小程序:进度条

个人主页:Lei宝啊 愿所有美好如期而遇 目录 回车与换行的概念和区别 行缓冲区概念 进度条代码 version1 version2 version3 回车与换行的概念和区别 换行\n,回车\r 似乎无需多言 行缓冲区概念 这里我们通过例子来简单理解即可,深入…

基于单片机的智能扫地机设计

概要 本文主要设计一个简单的智能扫地机。该扫地机的核心控制元器件是stc89c52,具有编写程序简单,成本普遍较低,功能较多,效率特别高等优点,因此在市场上得到很大的应用。除此之外,该扫地机能够自动避开障碍…

C语言实现利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示

完整代码&#xff1a; /*利用条件运算符的嵌套来完成此题&#xff1a;学习成绩>90分的同学用A表示&#xff0c;60-89分之间 的用B表示&#xff0c;60分以下的用C表示*/ #include<stdio.h>int main(){int score;char grade;printf("请输入你的成绩&#xff1a;&q…

IGP高级特性简要介绍(OSPF-上篇)

OSPF高级特性 一、OSPF_提升故障收敛及网络恢复速度 1.FRR与BFD快速恢复故障 1.1 FRR 在传统转发模式下&#xff0c;当到达同一个目的网络存在多条路由时&#xff0c;路由器总是选择最优路由使用&#xff0c;并且下发到FIB表指导数据转发。 当最优路由故障时&#xff0c;需…

Ubuntu18.04安装pcl-1.12.1,make时报错:/usr/bin/ld: cannot find -lvtkIOMPIImage

解决方案&#xff1a; 在vtk安装包中&#xff0c;重新打开cmake-gui&#xff0c;然后勾选上VTK_Group_MPI和VTK_Group_Imaging。 cd VTK-8.2.0 cd build cmake-gui然后重新编译生成。 make -j8 # 或者j4,量力而行。 sudo make install 就可以解决了。 然后重新回到pcl安装…

虚拟机没有桥接模式--物理机WiFi不见了--注册表修复

我们知道虚拟机有三种模式&#xff1a; vmnet0 桥接模式&#xff1b;vmnet1 仅主机模式&#xff1b;vmnet8 NAT模式 我自己以前一直用的NAT模式&#xff0c;今天突然要用到桥接模式&#xff0c;发现无法切换... 我下面这个是后面弄好了的&#xff0c;最开始是没有显示桥接模式…

Vue 3 中,watch 和 watchEffect 的区别

结论先行&#xff1a; watch 和 watchEffect 都是监听器&#xff0c;都是用来监听响应式数据的变化并执行相应操作。区别是&#xff1a; watch&#xff1a;需要指明要监听的数据&#xff0c;而且在回调函数中可以获取到属性变化的前后值&#xff1b; 适用于需要精确控制监视…

quickapp_快应用_快应用组件

快应用组件 web组件web页面与快应用页面通信网页接收/发送消息网页接收消息 快应用页面接收/发送消息给网页发送消息 通信前提- trustedurl web组件 作用&#xff1a;用于显示在线的 html 页面(可以嵌入三方页面或者某些不太重要的页面) 缺点&#xff1a;打开会比原生慢一点&…

容联七陌携手岚时科技,解决医美机构回访3大痛点

近日&#xff0c;岚时科技研发中心联合容联七陌发布了全新的智能呼叫中心系统&#xff0c;5大功能模块解决了医美机构回访过程中的3大难题&#xff1a;客户资产保全困难、客户回访技术被卡脖子、回访人员&#xff08;客服、咨询&#xff09;效率管理困难。 “智能呼叫中心”通过…

Camtasia2024破解版电脑屏幕录制剪辑软件

屏幕录制剪辑 TechSmith Camtasia for Mac v2021是 TechSmith 公司所开发出一款专业屏幕录像和编辑&#xff0c; Camtasia Studio2024版是由TechSmith公司官方进行汉化推出的最新版本,除2023版以下版本均没有官方汉化。 同时TechSmith公司打击第三方贩卖Camtasia Studio汉化的…

MS2111多点低压差分(M-LVDS)线路驱动器和接收器

MS2111 是多点低压差分 (M-LVDS) 线路驱动器和接收器。经过 优化&#xff0c;可运行在高达 200Mbps 的信号速率下。所有部件均符合 M LVDS 标准 TIA / EIA-899 。该驱动器的输出支持负载低至 30Ω 的多 点总线。 MS2111 的接收器属于 Type-2 &#xff0c; 可在 -1…

第三章:人工智能深度学习教程-基础神经网络(第五节-了解多层前馈网络)

让我们了解反向传播网络 (BPN) 中的误差是如何计算的以及权重是如何更新的。 考虑下图中的以下网络。 反向传播网络(BPN) 上图中的网络是一个简单的多层前馈网络或反向传播网络。它包含三层,输入层有两个神经元 x 1和 x 2,隐藏层有两个神经元 z 1和 z 2,输出层有一个神经…

基于element-ui封装可配置表单组件

“vue”: “^2.7.13” “element-ui”: “^2.15.7” 代码地址 【说明】 该组件时使用vue3&#xff08;vue2.7&#xff09;语法封装&#xff0c;使用时可用vue2语法使用也可以使用vue3语法使用 一、vue2语法使用案例 基础用法 <template><div class"form-demo…

擎创动态 | 开箱即用!擎创科技联合中科可控推出大模型一体机

一、金融行业大模型一体机发布 10月26日至27日&#xff0c;2023金融科技安全与创新大会顺利召开。会上&#xff0c;中科可控联合擎创科技、卓世科技、文因互联、百川智能、捷通华声、智谱华章、易道博识等9大厂商&#xff0c;发布了9款金融行业大模型一体机&#xff0c;为金融…

加速度jsudo:小企业会遇到哪些瓶颈期?

什么是瓶颈期&#xff1f;瓶颈期&#xff0c;就是你无论怎么努力&#xff0c;成绩都是上不去&#xff0c;还是停留在原地&#xff1b;而自己表现的还是很匆忙&#xff0c;却不知道如何下手&#xff1f;就像水桶效益一样&#xff0c;水桶的木板高度层次不齐&#xff0c;像极了自…