当前位置: 首页 > news >正文

不写前端代码,curl直接调试sse

不写前端代码,curl直接开两个终端调试sse

过程:

客户端向服务端发送建立连接请求;
服务端向客户端推送内容;
服务端向客户端发送结束信号并结束

注意事项:

只有连接时要求content-type是xxx

其他问题:

服务端打算断开时,是否需要先得到客户端应答再断开?

java代码参考:

controller层


@RestController
public class ChatController {@Autowiredprivate ChatService chatService;// TODO: 2023/10/16 执行顺序@CrossOrigin@PostMapping(value = "/ask")@SneakyThrowspublic void chatGPT(@RequestBody ChatRequest request) {chatService.chat(request);// TODO: 2023/10/16 执行顺序 2}@CrossOrigin@GetMapping(value = "/link", produces = "text/event-stream;charset=utf-8")@SneakyThrowspublic SseEmitter link() {return chatService.link();// TODO: 2023/10/16 执行顺序 1}@CrossOrigin@PostMapping(value = "/stop")@SneakyThrowspublic void chatGPT() {chatService.stop();// TODO: 2023/10/16 执行顺序 3}
}
请求体

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ChatRequest {private String question;
}
接口

public interface ChatService {void chat(ChatRequest request);SseEmitter link();void stop();}
实现类
@Slf4j
@Service
public class ChatServiceImpl implements ChatService {static HashMap<String, SseEmitter> map = new HashMap<>();@SneakyThrows@Overridepublic void chat(ChatRequest request) {SseEmitter sseEmitter = map.get("222");String question = request.getQuestion();char[] chars = question.toCharArray();for (int i = 0; i < chars.length; i++) {sseEmitter.send(SseEmitter.event().id("111").data(chars[i]));}}@SneakyThrows@Overridepublic SseEmitter link() {SseEmitter sseEmitter = new SseEmitter(0L);//设置超时时间,单位为毫秒map.put("222", sseEmitter);//  >> 回调1:长链接完成后回调接口(即关闭连接时调用)sseEmitter.onCompletion(() -> {map.remove("222");log.info("连接关闭, userId = {},  sessionId = {}, 时间戳 = {}", null, null, System.currentTimeMillis());// TODO: 2023/10/16 执行顺序 4});//  >> 回调2:出现异常会调用此方法sseEmitter.onError(new Consumer<Throwable>() {@Overridepublic void accept(Throwable throwable) {log.info("连接出错, userId = {},  sessionId = {}, 时间戳 = {}", null, null, System.currentTimeMillis());sseEmitter.completeWithError(new RuntimeException("SSE 超时了"));}});//  >> 回调3:出现连接超时,会调用此方法sseEmitter.onTimeout(() -> {log.info("连接超时, userId = {},  sessionId = {}, 时间戳 = {}", null, null , System.currentTimeMillis());sseEmitter.completeWithError(new RuntimeException("SSE 超时了"));});sseEmitter.send(SseEmitter.event().data("操作成功"));return sseEmitter;}@SneakyThrows@Overridepublic void stop() {SseEmitter sseEmitter = map.get("222");sseEmitter.send(SseEmitter.event().id("111").data("中断"));sseEmitter.complete();}
}

终端开两个窗口通过curl验证效果

  • 请求连接的curl
curl -H "Accept: text/event-stream" http://localhost:9033/link

得到应答:
在这里插入图片描述

  • 提问的curl(这个演示的是将输入的文字推送出来):
curl -X POST -H "Content-Type: application/json" -d "{\"question\": \"hhhhh\"}" http://localhost:9033/ask

提问后得到的响应:
在这里插入图片描述

  • mock服务主动断开的curl:
curl -X POST http://localhost:9033/stop

客户端收到的:
在这里插入图片描述

相关文章:

不写前端代码,curl直接调试sse

不写前端代码&#xff0c;curl直接开两个终端调试sse 过程&#xff1a; 客户端向服务端发送建立连接请求&#xff1b; 服务端向客户端推送内容&#xff1b; 服务端向客户端发送结束信号并结束 注意事项&#xff1a; 只有连接时要求content-type是xxx 其他问题&#xff1a; …...

百分点科技受邀参加“一带一路”国际合作高峰论坛

10月17-18日&#xff0c;第三届“一带一路”国际合作高峰论坛在北京成功举行。作为新一代信息技术出海企业代表&#xff0c;百分点科技董事长兼CEO苏萌受邀出席高峰论坛开场活动——“一带一路”企业家大会&#xff0c;与来自82个国家和地区的企业或机构、有关国际组织、经济机…...

git学习——第4节 时光机穿梭

我们已经成功地添加并提交了一个readme.txt文件&#xff0c;现在&#xff0c;是时候继续工作了&#xff0c;于是&#xff0c;我们继续修改readme.txt文件&#xff0c;改成如下内容&#xff1a; Git is a distributed version control system. Git is free software. 现在&…...

golang 在 Mac、Linux、Window 下交叉编译

目录 交叉编译参数说明CGO_ENABLEDGOOS : 目标操作系统【darwin、linux、windows】GOARCH &#xff1a;目标架构【386、amd64、arm】 Mac 下编译&#xff0c;Linux / Windows 下执行Linux 下编译&#xff0c;Mac / Windows 下执行Windows 下编译&#xff0c;Mac / Linux 下执行…...

半导体可靠性测试方法都有哪些?

半导体测试是半导体设备中的一种技术&#xff0c;其中半导体组件(芯片、模块等)在组装到系统就会出现故障。在特定电路的监控下&#xff0c;部件被迫经历一定的半导体试验条件&#xff0c;并分析部件的负载能力等性能。这种半导体测试有助于确保系统中使用的组件导体器件&#…...

百度智能云发布AI原生应用工作台,为大模型落地五类需求提供最优

10月17日&#xff0c;百度世界在北京首钢园召开。百度智能云在大会期间的重磅发布&#xff0c;先来个主要内容总结&#xff1a; 首先&#xff0c;百度智能云在百度世界2023大会上宣布了以下重要消息&#xff1a;面向企业客户的文心大模型4.0 API调用服务得到了广泛应用&#x…...

flutter 手机卡住,需要等待,主线程被占用

ANR原理分析 WaitingInMainSignalCatcherLoop log中记录了ANR发生的时间以及具体提示。WaitingInMainSignalCatcherLoop代表了主线程等待异常。The application may be doing too much work on its main thread.同样表示处理时间过多。 traces 刚才的log有第二句Wrote stack …...

微信小程序 onLoad(option) 方法

在微信小程序中&#xff0c;onLoad(option) 是一个生命周期函数&#xff0c;用于监听页面加载。当小程序的页面被加载时&#xff0c;onLoad(option) 函数会被自动调用&#xff0c;并将页面的参数传递给这个函数。 option 参数是一个包含页面参数的对象&#xff0c;其中的每个属…...

Vue3 实现文件预览 Word Excel pdf 图片 视频等格式 大全!!!!

先上效果图 插件安装 先说 word 文件是docx-preview插件 excel文件是用 xlsx 插件 介绍后端返回的数据 因为在拦截器处 做了对数据的处理 最后你调接口拿到的数据是 一个对象 里面包含: url : blob对象转换的用于访问Blob数据的临时链接。这个链接可以被用于在网页中展示…...

GaussDB for openGauss部署形态

前言 华为云数据库GaussDB是华为自主创新研发的分布式关系型数据库&#xff0c;具有高性能、高可用、高安全、低成本的特点&#xff0c;本文带你详细了解GaussDB数据库的部署形态。 1、GaussDB部署形态三种类型 GaussDB部署形态&#xff1a;单机 独立部署是将数据库组件部署…...

6.MidBook项目经验之前端nuxt优化SEO和手机登录,微信登录

1.nuxt服务端渲染技术SSR Server Side Render(ajax异步请求,SEO是靠爬虫抓取数据的,没有抓到数据排名靠后) 1.在用户端搭建(利于SEO) 1.解压后 npm install npm run dev 2.default.vue有 头内容和尾,创建头尾文件,然后加入到组件 3.每个前端系统对应一个单独的后台接口(太方便了…...

NR SRS power control

这篇看下NR SRS power control的相关内容&#xff0c;主要内容集中在38.213 7.3章节&#xff0c;SRS power control与PUSCH很类似&#xff0c;当然细节上也有所不同&#xff0c;这里简单看下。 UL功率控制,主要是PUSCH/PUCCH/SRS/PRACH的传输功率。 对于所有PUSCH/PUCCH/SRS传输…...

C++(boost):通过boost::process::child同步调用其他程序

boost提供了boost::process::child,可以通过其调用其他程序,并获得输出: #include <boost/process/child.hpp> #include <boost/process/io.hpp> #include <vector> #include <iostream> #include <string> #include <tuple>using nam…...

【经验分享】解决vscode编码问题

目录 先看一下我遇到的问题和你们的一不一样 下面是我查到的解决办法&#xff1a; 简单点说就是 我们看看解决后的效果 先看一下我遇到的问题和你们的一不一样 我一开始以为就是编码问题。 下面是我查到的解决办法&#xff1a; 这个错误提示看起来仍然是中文乱码。可能是由于…...

核酸管外观缺陷检测(一)

1.1 应用示例思路 (1) 对核酸管图像进行灰度化、阈值分割和连通域分析&#xff1b; (2) 筛选出待检测的区域&#xff0c;并对该区域进行变换校正&#xff1b; (3) 进一步获取待检测的ROI区域&#xff0c;并根据几何特征和阈值条件&#xff0c;来对核酸管外观进行检测&#x…...

NodeJS @kubernetes/client-node连接到kubernetes集群的方法

1. 首先&#xff0c;你需要在你的项目中安装kubernetes/client-node。你可以使用npm&#xff08;Node Package Manager&#xff09;来进行安装。在你的终端中输入以下命令&#xff1a; npm install kubernetes/client-node 2. 安装完毕后&#xff0c;你可以在你的代码中引入这…...

【基于Kmeans、Kmeans++和二分K均值算法的图像分割】数据挖掘实验三

文章目录 Ⅰ、项目任务要求II、原理描述KMeansKMeans二分K均值评价指标-轮廓系数 III、数据集描述IV、具体实现过程V、结果分析VI、完整代码VII、深度学习与图片分割&#xff08;补充&#xff09;CNN1. 卷积层&#xff08;Convolutional Layer&#xff09;&#xff1a;2. 激活函…...

深入理解Java CompletableFuture并发编程模型

摘要&#xff1a;本文将介绍Java中的CompletableFuture类&#xff0c;探讨其在并发编程中的应用。我们将详细讨论CompletableFuture的特性、常见用法和最佳实践&#xff0c;帮助开发人员更好地利用这个强大的工具进行异步编程。 1. 什么是CompletableFuture&#xff1f; Compl…...

TensorFlow手动加载数据集(以mnist为例)

在进行Mnist手写识别的项目中&#xff0c;出现了Mnist数据集下载出错的问题&#xff0c;报出以下错误&#xff1a; Exception: URL fetch failure on https://s3.amazonaws.com/img-datasets/mnist.npz: None – [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主…...

C++项目实战——基于多设计模式下的同步异步日志系统(总集篇)

文章目录 专栏导读项目介绍开发环境核心技术环境搭建日志系统介绍1.为什么需要日志系统2.日志系统技术实现2.1同步写日志2.2异步写日志 前置知识补充不定参函数C风格不定参函数不定参宏函数设计模式六大原则单例模式饿汉模式懒汉模式 工厂模式简单工厂模式工厂方法模式抽象工厂…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...