1、Hertz SSEHertz SSE 实现原理&在 AI ChatBot 的落地讲师:万子渝&范舒阳2024/03/3001.简介02.设计和实现03.使用 Hertz 实现 ChatBotCONTENT目 录万子渝-重庆邮电大学-计算机学院-2023 年接触并参与到 CloudWeGo 开源社区-现为 Hertz 框架 Commiter01简介SSE 简介 SSESSE(Server-Sent Events)是一种基于 HTTP 协议的协议,它允许服务器向客户端推送事件。这意味着客户端不再需要不断地向服务器请求数据,服务器可以主动将数据推送给客户端。SSE 通常用于实时更新的数据。SSE 简
2、介SSE的主要特点SSE 简介为什么使用 SSE 而不使用 WebSocket?1.兼容性和易用性:SSE 不需要额外的握手过程和协议,SSE 使用简单的文本格式进行数据传输。SSE 简介为什么使用 SSE 而不使用 WebSocket?2.在许多场景中,例如 ChatGPT 客户端只需要发起建立连接的请求,而服务端需要主动向客户端发送消息,SSE 的单向通信模式足以满足需求。SSE 简介Hertz SSE 和 Kitex Thrift Streaming 的区别和联系区别:1,协议2,消息格式3,使用场景与生态联系:Hertz SSE 和 Kitex Thrift Streaming 可以结
3、合使用,以实现在分布式系统中的实时通信和低延迟数据传输。02设计和实现Hertz 框架实现 SSE Server&Client设计和实现Hertz-SSE在广泛应用 AIGC 的时代,SSE 协议具有一定的重要性,可以简单易用地用于实现实时数据推送的功能。作为 CloudWeGo 社区开源的 HTTP 框架 HertzHertz,为了支持云原生 x AI 时代的微服务架构最佳实践,在 hertz-contrib 拓展库中加入了SSESSEserver/client 端实现。设计和实现请求头格式1.Cache-Control:设置 Cache-Control 为 no-cache以禁用缓存。2.
4、Content-Type:SSE 使用的 Content-Type 是 text/event-stream3.Connection:为了保持长连接,设置 Connection 为 keep-alive设计和实现传输消息格式其中 data 为具体信息,ID作为唯一标识,Event 作为标签,retry 是毫秒数用来实现中断重连。设计和实现Server 新建流对象与发布消息NewStream 用于创建一个新的流(Stream)对象Publish 用于将事件(Event)推送给客户端并使用Encode函数将事件编码并写入到流(Stream)的写入器(Writer)中设计和实现Client 端开启循环
5、监听新建 StreamReader,开启循环读 用于从事件流(EventStream)中扫描并读取事件(event)的数据 设计和实现Client 端处理消息将数据流按行分割,并根据特定的规则解析每一行的内容,并将解析结果存储到相应的字段中。如果行以headerID为前缀:将行的前缀去除后的内容转换为字符串,并赋值给e.ID字段。如果行以headerData为前缀:将行的前缀去除后的内容添加到e.Data字段中。根据规范,多个数据字段可以用换行符连接。如果行与headerData相等(不包括最后的冒号):将换行符添加到e.Data字段中,表示一个空的数据字段。如果行以headerEvent为前
6、缀:将行的前缀去除后的内容转换为字符串,并赋值给e.Event字段。如果行以headerRetry为前缀:将行的前缀去除后的内容转换为字符串,并使用strconv.ParseUint将其解析为无符号整数,并赋值给e.Retry字段。设计和实现Server 端发布信息通过简单的 sse.NewStream(*app.RequestContext)和Publish(event)函数能够快速构建服务端消息事件流。设计和实现Client 端配置设置连接服务端时触发的函数/服务端断开连接触发的函数设置 sse client