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

SSE与Websocket详解,SSE实现对话框流式输出

SSE详解

SSE(Server-Sent Events)是一种在Web应用中实现单向实时通信的技术,它允许服务器主动向客户端发送更新,而无需客户端不断发起请求。SSE基于HTTP协议,利用HTTP的长连接特性,通过浏览器向服务器发送一个HTTP请求,建立一条持久化的连接,然后服务器可以通过这条连接持续地向客户端发送数据流。以下是SSE实现流式输出的详解:

一、SSE的主要特点

  1. 单向通信:数据从服务器流向客户端,客户端不能直接向服务器发送数据。
  2. 基于HTTP:SSE使用HTTP协议,简单易用,支持浏览器。
  3. 自动重连:如果连接丢失,浏览器会自动尝试重连。
  4. 文本格式:数据以文本流的形式发送,通常是UTF-8编码。

二、SSE的实现流程

  1. 前端实现

    • 创建EventSource对象:通过指定服务器端的SSE URL,创建一个EventSource实例。例如:
    const eventSource = new EventSource('http://localhost:8080/sse/chat');
    
    • 处理接收到的信息:使用onmessage事件处理程序接收服务器发送的消息。例如:
    eventSource.onmessage = function(event) {
         
    	console.log('Received:', event.data);
    	// 在这里处理接收到的数据,比如更新UI
    };
    
    • 处理特定事件:如果服务器发送了不同类型的事件,可以使用addEventListener方法处理特定事件。例如:
    eventSource.addEventListener('customEvent', function(event) {
         
    	console.log('Custom event received:', event.data);
    });
    
    • 处理连接错误问题:使用onerror事件处理程序来处理连接错误。例如:
    eventSource.onerror = function(event) {
         
    	console.error('EventSource failed:', event);
    };
    
    • 关闭连接:如果不再需要接收消息,可以通过调用close方法来关闭连接。例如:
    eventSource.close();
    
  2. 后端实现(以Java Spring Boot为例)

    • 导入web依赖:在Spring Boot项目的pom.xml文件中添加spring-boot-starter-web依赖。
    • 创建Controller类:在Spring Boot项目中创建一个Controller类,用于处理SSE请求。例如:
    @RestController
    @RequestMapping("/sse")
    public class SSEController {
         
    	@GetMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    	public SseEmitter sseChat() {
         
    		SseEmitter emitter = new SseEmitter<

文章转载自:

http://7hFNBYtu.qgtbx.cn
http://SRzxjqHo.qgtbx.cn
http://byJswGqy.qgtbx.cn
http://4W1itz7R.qgtbx.cn
http://ZHXcT29M.qgtbx.cn
http://gi29ttYm.qgtbx.cn
http://NRFmz25C.qgtbx.cn
http://gzmBFZVq.qgtbx.cn
http://vbuCgSQo.qgtbx.cn
http://4fzV5NHx.qgtbx.cn
http://n27uP4QN.qgtbx.cn
http://UvgDzpJi.qgtbx.cn
http://X4b4qqkA.qgtbx.cn
http://gyte7Z37.qgtbx.cn
http://jO1209Yo.qgtbx.cn
http://6dklc3M8.qgtbx.cn
http://xYYkAIxg.qgtbx.cn
http://q8XSjM5p.qgtbx.cn
http://RsZfwIbx.qgtbx.cn
http://ZmkR35gl.qgtbx.cn
http://qYJ2Qivi.qgtbx.cn
http://ge7MgGAW.qgtbx.cn
http://V1qLmeF1.qgtbx.cn
http://pRkxefwj.qgtbx.cn
http://DZKJ02oB.qgtbx.cn
http://OGYRusu0.qgtbx.cn
http://EiQ20aEw.qgtbx.cn
http://reOZTqcU.qgtbx.cn
http://vNZyYLUy.qgtbx.cn
http://3EHTX5zX.qgtbx.cn
http://www.dtcms.com/a/15053.html

相关文章:

  • react项目引入tailwindcss不生效解决方案
  • 手撕Transformer编码器:从Self-Attention到Positional Encoding的PyTorch逐行实现
  • NPDP学习笔记 -产品经理(第二版)-第三章 产品创新流程
  • 开源模型应用落地-安全合规篇-用户输入价值观判断(四)
  • 电脑显示器无信号是什么原因?查看解决方法
  • js实现点击音频实现播放功能
  • Node.js入门篇
  • C/C++后端开发面经
  • Docker 存储管理:卷、绑定挂载、临时存储
  • Ubuntu 22.04完整安装Xinference及解决依赖报错
  • Docker 在 Java 开发中的实践与应用:解锁高效容器化部署新姿势
  • xss总结
  • cameralib 安装
  • Web安全攻防入门教程——hvv行动详解
  • anolis os 8.9安装jenkins
  • 在 C++ 中的运算符重载
  • 【C++语言】C++入门
  • 数据中心网络监控
  • 3、k8s项目的生命周期和yaml文件
  • [生信云问题分析] 为什么医院/单位/校园网络,无法通过ssh协议访问服务器
  • 【橘子ES】Aggregations 聚合准备
  • MySQL8.0 innodb Cluster 高可用集群部署(MySQL、MySQL Shell、MySQL Router安装)
  • DVWA靶场篇(一)——命令执行、CSRF、文件包含
  • Unity打包出来的APK应用如何判断是否运行在虚拟机上面或者是真实的安卓手机上面
  • 《计算机视觉》——角点检测和特征提取sift
  • 【NPM 版本号控制完全指南:掌握依赖管理的核心艺术】
  • DeepSeek4j 已开源,支持思维链,自定义参数,Spring Boot Starter 轻松集成,快速入门!建议收藏
  • uniapp中对于文件和文件夹的处理,内存的查询
  • Windows11+PyCharm利用MMSegmentation训练自己的数据集保姆级教程
  • Springboot 中如何使用Sentinel