SSE(服务器推送事件)规范

SSE 是指 "Server-Sent Events",即服务器推送事件。它是一种基于 HTTP 的服务器推送技术,允许服务器实时向客户端推送数据。SSE 规范定义了一种在客户端和服务器之间单向实时通信的方式,通常用于实现服务器向客户端推送更新、通知或实时数据。

使用 SSE,客户端可以通过简单的 JavaScript 代码监听来自服务器的事件流,从而实现实时更新,而无需轮询服务器或使用复杂的 WebSocket 协议。SSE 通常用于实现实时性要求不高、但需要实时更新的应用场景,比如股票市场更新、即时通讯等。

SSE 规范定义了一些特定的 HTTP 头部和事件格式,以及客户端和服务器之间的通信方式,从而实现了简单而高效的服务器推送功能。

以下是一个符合 SSE 规范的简单请求示例:

GET /events HTTP/1.1
Host: example.com
Accept: text/event-stream
Cache-Control: no-cache
Connection: keep-alive

在这个示例中,客户端向服务器发送了一个 GET 请求,请求的资源路径是 "/events"。请求头中包含了 "Accept: text/event-stream",表示客户端希最接收服务器推送的事件流。另外,还设置了 "Cache-Control: no-cache" 和 "Connection: keep-alive" 头部,以确保不缓存响应并保持长连接。

服务器在收到这个请求后,可以使用类似下面的响应来向客户端推送事件:

HTTP/1.1 200 OK
Content-Type: text/event-stream
Cache-Control: no-cache
Connection: keep-alivedata: Hello, world!data: This is a second message.

在这个响应中,服务器使用 "Content-Type: text/event-stream" 表示响应是一个 SSE 事件流。接着使用 "data" 字段来发送事件数据,每个事件以 "data:" 开头,后面跟着事件的内容。客户端收到这样的响应后,就可以解析其中的事件数据并进行相应的处理。

这就是一个简单的符合 SSE 规范的请求和响应示例。

客户端

在客户端,您可以使用 JavaScript 来处理服务器推送的 SSE 事件流。以下是一个简单的示例代码,演示了如何使用 JavaScript 来接收和处理 SSE 事件流:

const eventSource = new EventSource('/events');eventSource.onopen = function(event) {console.log('Connection opened.');
};eventSource.onmessage = function(event) {const eventData = JSON.parse(event.data);console.log('Received event data:', eventData);// 在这里可以对接收到的事件数据进行处理
};eventSource.onerror = function(event) {if (event.eventPhase === EventSource.CLOSED) {console.log('Connection was closed.');} else {console.error('Error occurred:', event);}
};

在这个示例中,我们首先创建了一个新的 EventSource 对象,指定了服务器端的事件流路径 "/events"。然后我们定义了三个事件处理函数:

  1. onopen 事件处理函数在连接建立时被调用,这里我们简单地输出一条日志。
  2. onmessage 事件处理函数在接收到新的事件数据时被调用,我们在这里解析并处理接收到的事件数据。
  3. onerror 事件处理函数在发生错误时被调用,我们在这里输出错误信息。

通过这些事件处理函数,我们可以实现对服务器推送的事件流的监听和处理。当服务器向客户端推送事件时,onmessage 事件处理函数会被调用,从而实现了实时更新和处理。

服务端

在 Java 中,您可以使用 Servlet 来处理 SSE 请求并向客户端推送事件。以下是一个简单的示例代码,演示了如何在服务端使用 Java Servlet 来处理 SSE 请求并向客户端推送至少两次事件:

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class EventSourceServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {response.setContentType("text/event-stream");response.setCharacterEncoding("UTF-8");response.setHeader("Cache-Control", "no-cache");PrintWriter out = response.getWriter();// 第一次推送事件out.write("data: First event\n\n");out.flush();// 模拟延迟try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}// 第二次推送事件out.write("data: Second event\n\n");out.flush();}
}

在这个示例中,我们创建了一个名为 EventSourceServlet 的 Servlet 类,覆盖了 doGet 方法来处理 GET 请求。在该方法中,我们首先设置了响应的内容类型为 "text/event-stream",并且禁用了缓存。然后我们获取了输出流,并向客户端推送了两次事件,每次事件之间模拟了一个 2 秒的延迟。

通过这个示例,您可以在 Java 中实现一个简单的 SSE 服务端,并向客户端推送至少两次事件。当客户端发起 GET 请求时,服务器会向客户端推送事件流,客户端可以通过前面提供的 JavaScript 代码来接收和处理这些事件。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【matlab】MATLAB常用内置函数示例

目录: 数值计算函数 1.1 abs函数 1.2 sin、cos、tan函数 1.3 exp、log函数 1.4 sqrt函数 1.5 sum、prod函数 矩阵和向量操作函数 2.1 size函数 2.2 reshape函数 2.3 repmat函数 2.4 eye函数 2.5 rand、randn函数 绘图函数 3.1 plot函数 3.2 scatter函数 3.3 bar函数 3.4 hist函…

面试题总结(十四)【系统移植】【华清远见西安中心】

你用过哪些Bootloader?有什么区别? 作为一个AI助手,我没有直接使用过Bootloader。但我可以为您提供一些关于常见Bootloader的信息和他们之间的区别。 1. GRUB (GRand Unified Bootloader):GRUB是一个功能强大且广泛使用的Bootload…

【鉴权】JWT加密

目录 定义 官网 定义 JWT是JSON Web Token的缩写,是RFC7519规范。该规范目的是为了让客户端和服务端可靠的传递信息。 官网 JSON Web Tokens - jwt.io JWT是由三个部分组成,HMACSHA256( base64UrlEncode(header) "." base64UrlEncode(pa…

rk3568 MDIO总线

rk3568 MDIO总线 MDIO(Management Data Input/Output)是一种管理数据输入/输出协议,用于在以太网交换机和PHY(物理层收发器)之间进行通信。在网络设备中,MDIO总线用于控制网络接口的PHY芯片,例如通过MDIO总线访问PHY芯片的寄存器。这些寄存器包含了一些关于网络连接状态…

AWS 知识二:AWS同一个VPC下的ubuntu实例通过ldapsearch命令查询目录用户信息

前言: 前提:需要完成我的AWS 知识一创建一个成功运行的目录。 主要两个重要:1.本地windows如何通过SSH的方式连接到Ubuntu实例 2.ldapsearch命令的构成 一 ,启动一个新的Ubuntu实例 1.创建一个ubuntu实例 具体创建实例步骤我就不…

vue el-date-picker中datetime类型对今天之后的日期包含时分禁用

vue el-date-picker中datetime类型对今天之后的日期包含时分禁用 目前对选择秒那一列未禁用 <template><div><el-date-pickerv-model"deactivateTime"type"datetime"format"yyyy-MM-dd HH:mm:ss"value-format"yyyy-MM-dd HH…

抖音直播间websocket礼物和弹幕消息推送可能出现重复的情况,解决办法

在抖音直播间里&#xff0c;通过websocket收到的礼物消息数据格式如下&#xff1a; {common: {method: WebcastGiftMessage,msgId: 7283420150152942632,roomId: 7283413007005207308,createTime: 1695803662805,isShowMsg: True,describe: 莎***:送给主播 1个入团卡,priority…

HarmonyOS4.0从零开始的开发教程17给您的应用添加通知

HarmonyOS&#xff08;十五&#xff09;给您的应用添加通知 通知介绍 通知旨在让用户以合适的方式及时获得有用的新消息&#xff0c;帮助用户高效地处理任务。应用可以通过通知接口发送通知消息&#xff0c;用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应…

管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜A/B

老规矩&#xff0c;看目录&#xff0c;平均3-5题 文章目录 A/B2023真题&#xff08;2023-19&#xff09;-A-选项特点&#xff1a;两个等号&#xff1b;-纯蒙猜-哪个长选哪个【不要用这招&#xff0c;因为两个选项&#xff0c;总会有一个长的&#xff0c;那不就大多都是A/B&…

git log实用指令

gi查看提交历史 在提交了若干更新&#xff0c;又或者克隆了某个项目之后&#xff0c;你也许想回顾下提交历史。 完成这个任务最简单而又有效的工具是 git log 命令 当你在此项目中运行 git log 命令时&#xff0c;可以看到下面的输出&#xff1a; $ git log commit ca82a6df…

透视数据:数据可视化工具的多重场景应用

数据可视化工具已经成为了许多领域中的重要利器&#xff0c;它们在各种场景下发挥着重要作用。下面我就以可视化从业者的角度简单谈谈数据可视化工具在不同场景下的应用&#xff1a; 企业数据分析与决策支持 在企业层面&#xff0c;数据可视化工具被广泛应用于数据分析和决策…

16 v-model绑定多选框

概述 使用v-model绑定多选框也是一种比较常见的需求&#xff0c;比如一个用户可以绑定多个角色&#xff0c;可以有多个兴趣爱好。 在本节课中&#xff0c;我们来学习一下这两种用法。 基本用法 我们创建src/components/Demo16.vue&#xff0c;在这个组件中&#xff0c;我们…

SpringCloud02

1.在项目中&#xff0c;服务之间的调用是怎么实现的&#xff1f; 1.1基于RestTemplate和LoadBalanced注解&#xff1a; RestTemplate是Spring提供的用于访问RESTful服务的客户端。添加LoadBalanced注解后&#xff0c;RestTemplate会成为一个负载均衡的HTTP客户端&#xff0c;它…

10.鸿蒙应用程序app创建第一个程序Helloworld

鸿蒙应用程序开发app_hap开发环境搭建 1.打开DevEco 2.创建项目 3.选择Empty Ability 4. 选择API6,支持java开发 5.点击Finish 6.启动本地模拟器参考方法 7.启动成功 8.运行程序 9.运行成功 其它文章点击专栏

【告警自动化处置脚本】

【告警自动化处置脚本0】 以下是一个Python脚本&#xff0c;用于定时查询历史告警&#xff0c;找到攻击结果为成功的告警&#xff0c;并根据告警结果查询威胁情报。如果是恶意IP&#xff0c;则调用防火墙进行封禁&#xff0c;并记录封禁动作的日志。 首先&#xff0c;确保已经…

HarmonyOS:Neural Network Runtime对接AI推理框架开发指导

场景介绍 Neural Network Runtime 作为 AI 推理引擎和加速芯片的桥梁&#xff0c;为 AI 推理引擎提供精简的 Native 接口&#xff0c;满足推理引擎通过加速芯片执行端到端推理的需求。 本文以图 1 展示的 Add 单算子模型为例&#xff0c;介绍 Neural Network Runtime 的开发流…

轻量封装WebGPU渲染系统示例<50>- Json数据描述材质等3D渲染场景信息

本示例中的3d渲染场景由Json数据来描述。 包含3个主要部分: 1. Json描述渲染器的基本信息。 2. Json描述渲染场景的环境信息,包括全局的灯光、阴影、雾等。 3. Json描述构成场景的各个可选人实体&#xff0c;包括几何信息、transform、材质、渲染状态等。 当前示例源码git…

postMessage解决跨域、消息传递(平台嵌入其他项目,需要相互发送接受消息)

使用背景&#xff1a;其他平台嵌入到自己项目平台上&#xff0c;使用iframe做嵌套&#xff0c;但是涉及到进来免登录以及跨域问题&#xff0c;使用postMessage发送信息。 想要使用 postMessage 实现跨域通信和页面间数据通信&#xff0c;只要记住 window 提供的 postMessage 方…

开启创意之旅:免费、开源的噪波贴图(noise texture)生成网站——noisecreater.com详细介绍

在当今数字创意领域&#xff0c;噪波贴图&#xff08;Noise Texture&#xff09;是游戏渲染、游戏开发、美术设计以及影视制作等行业不可或缺的艺术素材之一。为了满足广大创作者的需求&#xff0c;noisecreater.com应运而生&#xff0c;成为一款免费、开源的噪波贴图生成工具。…

保护IP地址免受盗用的有效方法

IP地址是互联网通信的基础&#xff0c;然而&#xff0c;由于其重要性&#xff0c;IP地址的盗用成为一种潜在的网络威胁。本文将深入探讨防止IP地址被盗用的方法&#xff0c;以维护网络的安全性。 第一部分&#xff1a;IP地址盗用的威胁与风险 1.1 IP地址盗用的定义 IP地址盗…