SSE协议在java中的实践

该文章已生成可运行项目,

sse协议是什么

Server-Sent Events(SSE)是一种轻量级的实时通信技术。
它基于 HTTP 协议,允许服务器向客户端单向实时推送数据。与 WebSocket 这种全双工通信协议相比,SSE 更加简单易用,适合那些只需要服务器向客户端推送数据的场景,而且浏览器原生支持,无需额外的复杂配置。
主要应用场景:AI智能问答聊天、实时股票行情推送、新闻资讯平台的即时新闻更新、在线游戏中的实时状态同步等。

原理剖析

SSE 基于 HTTP 协议,利用了 HTTP 连接可以保持打开状态的特性。其核心原理是客户端通过创建一个 EventSource 对象并连接到服务器的特定 URL 来启动 SSE 连接。SSE请求的 Accept 头设置为 text/event - stream,服务器在接收到客户端的请求后,会设置特定的响应头,如 Content - Type: text/event - stream、Cache - Control: no - cache 和 Connection: keep - alive将 HTTP 连接保持打开状态,并在有新数据时通过这个连接将数据发送给客户端。

数据格式:服务器发送的数据以事件流的形式呈现,每条消息以 data: 开头,后面跟着实际的数据内容,消息结束时用两个换行符 \n\n 分隔。例如:

data: This is a sample message\n\n

java作为sse服务端

以AI问答为例,

  1. java作为服务端,接收来自web端的sse服务,java controller以get方式接收,并返回给前端seeEmitter

在这里插入图片描述

2.创建SeeMeitter
在这里插入图片描述

并定义相应的onCompletion、onTimeout、onError方法
在这里插入图片描述

3.发送信息
发送信息由两种方式,一种是sseEmitter.send(message)直接发送,另一种是
sseEmitter.send(SseEmitter.event() .id(dialogId) .data(message).reconnectTime(3000));
第二种方式客户端需要通过onMessage事件进行监听。
在这里插入图片描述

  1. 结束后需要关闭完成sse。
    在这里插入图片描述

java作为sse客户端

在实时聊天场景中,如果我们基于sse调用第三方接口,那么java将作为sse客户端,如何实现呢?

  1. 创建sseClient,在SseClient中执行异步线程请求sse,并将接收到的信息提取“data:”并传入通过OnMessage进行监听
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

参考资料

  1. Server-Sent Events(SSE)基本认识
本文章已经生成可运行项目
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值