SSE简介

SSE ( Server-sent Events )是 WebSocket 的一种轻量代替方案,使用 HTTP 协议。

严格地说,HTTP 协议是没有办法做服务器推送的,但是当服务器向客户端声明接下来要发送流信息时,客户端就会保持连接打开,SSE 使用的就是这种原理。

SSE 是 Server-Sent Events 的简称, 是一种服务器端到客户端(浏览器)的单项消息推送。

相比于 WebSocket,SSE 简单不少,服务器端和客户端工做量都要小不少、简单不少,同时实现的功能也有局限。

如何设置请求头/响应头

在请求头和响应头设置text/event-stream是实现SSE的关键。
请求头的设置:

响应头的设置:

SSE 能做什么?

理论上, SSE 和 WebSocket 做的是同一件事情。当你需要用新数据局部更新网络应用时,SSE 可以做到不需要用户执行任何操作,便可以完成。

SSE与WebSocket的区别

  1. WebSocket是全双工通道,可以双向通信,功能更强;SSE是单向通道,只能服务器向浏览器端发送。如果客户端需要向服务器发送消息,则需要一个新的 HTTP 请求。 这对比 WebSocket 的双工通道来说,会有更大的开销。
  2. WebSocket是一个新的协议,需要服务器端支持;SSE则是部署在 HTTP协议之上的,现有的服务器软件都支持。
  3. SSE是一个轻量级协议,相对简单;WebSocket是一种较重的协议,相对复杂。
  4. SSE默认支持断线重连,WebSocket则需要额外部署。
  5. SSE支持自定义发送的数据类型。
  6. SSE不支持CORS,参数url就是服务器网址,必须与当前网页的网址在同一个网域(domain),而且协议和端口都必须相同。WebSocket支持

SSE(Server-sent Events)在HTML 5中的技术规范和定义

Server-sent Events 规范是 HTML 5 规范的一个组成部分,具体的规范文档见参考资源。该规范比较简单,主要由两个部分组成:
第一个部分是服务器端与浏览器端之间的通讯协议,
第二部分则是在浏览器端可供 JavaScript 使用的 EventSource 对象。

通讯协议是基于纯文本的简单协议。服务器端的响应的内容类型是“text/event-stream”。响应文本的内容可以看成是一个事件流,由不同的事件所组成。
  每个事件由类型和数据两部分组成,同时每个事件可以有一个可选的标识符。不同事件的内容之间通过仅包含回车符和换行符的空行(“\r\n”)来分隔。每个事件的数据可能由多行组成。

okhttp-eventsource的使用

github:https://github.com/launchdarkly/okhttp-eventsource

okhttp-eventsourc是用java代码实现了SSE规范,网络传输基于okhttp。

build.gradle中导入依赖包:

    implementation 'com.launchdarkly:okhttp-eventsource:2.5.0'

使用:

EventHandler eventHandler = new EventHandler() {@Overridepublic void onOpen() throws Exception {}@Overridepublic void onClosed() throws Exception {}@Overridepublic void onMessage(String event, MessageEvent messageEvent) throws Exception {// 在这里接收服务端发出的消息// pass// 该回调运行在子线程}@Overridepublic void onComment(String comment) throws Exception {}@Overridepublic void onError(Throwable t) {}
};HttpUrl url = new HttpUrl.Builder().scheme("https").host("www.google.com").addPathSegment("search").addQueryParameter("q", "polar bears").build();EventSource eventSource = new EventSource.Builder(eventHandler, url).build();
eventSource.start();

示例

参考:
https://www.w3.org/TR/2015/REC-eventsource-20150203/
http://w3c.github.io/eventsource/

SSE技术详解:使用 HTTP 做服务端数据推送应用的技术
https://html.spec.whatwg.org/multipage/server-sent-events.html
https://github.com/launchdarkly/okhttp-eventsource
HTTP 服务器消息推送之SSE
Server-Sent Events 教程
服务端数据推送方式-SSE(server-sent event)简介及上手小demo

HTTP之SSE技术相关推荐

  1. 【SpringBoot】服务器端主动推送SSE技术讲解

    =====================16.高级篇幅之SpringBoot2.0服务器端主动推送SSE技术讲解 ============================ 1.服务端推送常用技术介绍 ...

  2. SpringBoot与ElasticSearch、ActiveMQ、RocketMQ的整合及多环境配置、响应式框架WebFlux、服务器端主动推送SSE技术、生产环境部署、Actuator监控平台

    1.SpringBoot 与 ElasticSearch 框架的整合 (1)主要的搜索框架:MySQL.Solr.ElasticSearch MySQL:使用 like 进行模糊查询,存在性能问题 S ...

  3. SpringBoot2.0实现服务器主动推送SSE技术

    文章目录 一.服务器推送技术 二.SpringBoot2.0 实现 SSE 一.服务器推送技术 客户端轮询:Ajax定时拉取 服务器主动推送:WebSocket WebSocket 是 HTML5 开 ...

  4. Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE

    摘要 Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯 方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Server- ...

  5. OpenAI ChatGPT API + FaskAPI SSE Stream 流式周转技术 以及前端Fetch 流式请求获取案例

    先填坑,一贯习惯 nginx如果要支持SSE,要调整一些参数 conf配置文件,AI给的,具体自己没搭,应该是正确的 nginx worker_processes 1;events {worker_c ...

  6. 图书《图像并行处理技术》简介

    本书从图像处理的特点出发,以算法与系统实现之间的联系为主线,系统地论述了图像并行处理技术.具体内容包括图像并行处理技术的基本概念.图像并行处理系统工程.图像处理算法与算法的并行数据结构.流水线型图像并 ...

  7. 深入探讨用位掩码代替分支(8):SSE指令集速度测试

    在上一篇测试了MMX指令集,这次我们来测试SSE指令集.说的更精确一点,是测试SSE2指令集. 本篇致力于解决以下问题-- 1.SSE/SSE2指令集是什么? 2.如何阅读Intel/AMD的手册? ...

  8. 【转】WebSocket详解(一):初步认识WebSocket技术

    1.前言 HTML5规范在传统的web交互基础上为我们带来了众多的新特性,随着web技术被广泛用于web APP的开发,这些新特性得以推广和使用,而websocket作为一种新的web通信技术具有巨大 ...

  9. 新手入门:史上最全Web端即时通讯技术原理详解

    前言 有关IM(InstantMessaging)聊天应用(如:微信,QQ).消息推送技术(如:现今移动端APP标配的消息推送模块)等即时通讯应用场景下,大多数都是桌面应用程序或者native应用较为 ...

最新文章

  1. Spring boot 和Vue开发中CORS跨域问题
  2. 理解bootstrap的列偏移offset 和 推拉push/pull的区别?
  3. 项目拆分子工程(简单版)
  4. 指数分布java_python-numpy-指数分布实例详解
  5. linux安装nodejs一键脚本,ubuntu16.04部署nodejs+vue框架脚本
  6. 基于python的modbus协议编程_通往未来的网络可编程之路:Netconf协议与YANG Model
  7. python中os模块教程_python os模块功能和方法总结
  8. 1078. Hashing (25)-PAT甲级真题
  9. vs各个版本的编译器号
  10. 油田智能化远程监控系统_油田远程监控系统方案
  11. 华为c语言笔试题下载,2005年华为招聘--C语言笔试试题
  12. 【财经期刊FM-Radio|2021年03月09日】
  13. 华为OD机试(21-40)老题库解析Java源码系列连载ing
  14. 八年级作文-倾听春雨的喜悦
  15. 【ORACLE数据库体系架构】
  16. JavaWeb-狂神系列
  17. Spring-boot 注解学习
  18. 详解Unity中的Nav Mesh新特性|导航寻路系统 (二)
  19. 说说VB中的语法规则
  20. 集中式版本控制与分布式版本控制

热门文章

  1. 如何在iPhone上用ChatGPT替换Siri
  2. Web攻击常见攻击方式及防范方案
  3. 【Android病毒分析报告】 - ZxtdPay 吸费恶魔
  4. 网友潜伏房产中介 曝光二手房买卖潜规则
  5. Android系统的问题分析笔记(4) - Android设备硬件基础
  6. 华为防火墙旁挂,终端区域与服务器区域拓扑总结
  7. 新手可直接复现:Duan版本CenterNet在2080Ti上训练自己的数据集——踩坑记录
  8. 日期获取,获取今天是周几
  9. web框架之flask
  10. Android客户端与PC端服务器进行交互