文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一文带你学会SSE,你学会了吗?

2024-11-29 18:42

关注

Server-Sent Events

Server-Sent Events 是一种允许服务器向浏览器发送实时更新的技术。不同于WebSocket的全双工通信方式,SSE更专注于单向的数据流,即从服务器到客户端的数据推送。

这种方式对于需要实时更新的场景非常有用,当前主流的大模型平台,比如ChatGPT、通义千问、文心一言,对话时采用的就是SSE。

SSE 本质是一个基于 http 协议的通信技术。

SSE的应用

引入依赖

spring-boot-starter-web 中默认已经引用了 sse,所以我们不需要额外引入其他依赖


    org.springframework.boot
    spring-boot-starter-web

基本用法

@RestController
public class SseController {

    @GetMapping("/sse")
    public SseEmitter handleSse() {
        SseEmitter emitter = new SseEmitter();

        // 异步处理发送事件
        new Thread(() -> {
            try {
                // 推送事件
                emitter.send("实时消息:你好!");
                Thread.sleep(1000);  // 模拟延时
                emitter.send("实时消息:更新来了!");
                emitter.complete(); // 结束推送
            } catch (Exception e) {
                emitter.completeWithError(e); // 异常处理
            }
        }).start();

        return emitter;
    }
}

客户端代码

const eventSource = new EventSource("/sse");

// 处理服务器推送的消息
eventSource.onmessage = function(event) {
    console.log(event.data);
};

// 处理连接关闭或错误
eventSource.onerror = function() {
    console.log("连接出现问题,自动重连...");
};

效果预览

图片

为什么会这么多,那是因为客户端的自动重连机制,无需我们手动维护,客户端会自动发起重连。

SseEmitter

其实sse的核心,就是SseEmitter这个类,是 Spring 提供的一个类,用于处理 Server-Sent Events (SSE)。它允许服务器端以流的形式推送事件给客户端,而不需要客户端不断轮询服务器。

1.构造函数

timeout:指定以毫秒为单位的超时时间。如果设置为 0L,则连接永远不会超时。

2.核心方法

object:要发送的数据,可以是任何类型的对象。

此方法会将数据直接发送到客户端,并在响应体中流式返回。

3.回调函数

4.SseEventBuilder 内部类

SseEmitter.SseEventBuilder 是用于构建 SSE 事件的一个类,允许自定义事件的各个部分:

目前 SseEmitter 是基于 每个客户端请求独立管理 的对象,因此不适合将其直接交由 Spring 管理为单例或共享对象。

每次请求应手动创建新的 SseEmitter 实例,并配置合适的超时时间。对于每个连接,SseEmitter 都是短暂的,使用完毕后应该调用 complete() 或 completeWithError() 方法来释放资源。

SSE 与 WebSocket 对比

图片

小结

来源:Java技术指北内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯