用 SpringBoot 和 SSE 打造动态前端更新的终极指南

这篇具有很好参考价值的文章主要介绍了用 SpringBoot 和 SSE 打造动态前端更新的终极指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用 SpringBoot 和 SSE 打造动态前端更新的终极指南

你知道什么是开发者的梦魇吗?慢!慢!慢!在一个需要实时数据更新的应用中,如果数据像乌龟一样慢吞吞地爬行,那用户体验就会像坐过山车一样直线下降。所以今天,我们要化身为数据传输的超级英雄,用 SpringBoot 和 SSE(服务器发送事件)打造一个超酷、超快、而且超实时的数据流!

为什么选择 SSE?

在开始我们的冒险之前,先让我们来谈谈为什么要选择 SSE(服务器发送事件)。简单来说,SSE 就像是那个总是知道你需要什么并且在你还没说之前就把它送到你面前的超级服务员。它允许服务器主动将信息“推送”到客户端,而不是等待客户端来“询问”。想象一下,你正在看一场激动人心的球赛直播,而不是每五秒刷新一次页面,SSE 可以帮你实时看到每一个进球。是不是很酷?

创建控制器

好的,现在让我们开始编写一些代码。首先,我们需要创建一个 SpringBoot 控制器。这个控制器就像是魔法世界的大门,让所有神奇的事情开始发生。
@RestController
@RequestMapping("/user")
public class UserController {

    private final CopyOnWriteArrayList<SseEmitter> emitters = new CopyOnWriteArrayList<>();

    @Autowired
    private UserMapper userMapper;

    @GetMapping(value = "/get",produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public  SseEmitter getAllUsers(){
        SseEmitter emitter = new SseEmitter();
        this.emitters.add(emitter);

        emitter.onCompletion(() -> this.emitters.remove(emitter));
        emitter.onError((e) -> this.emitters.remove(emitter));
        emitter.onTimeout(() -> this.emitters.remove(emitter));

        return emitter;
    }
   @GetMapping("/add")
    public void addUser(){
        User user = new User();
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        user.setUsername(formatter.format(now));
        user.setPassword(UUID.randomUUID().toString());
        userMapper.addUser(user);
        sendToClients();
    }
	

我这里做的是从数据库查询数据实时推送到前端,你也可以换成任何你喜欢的方式,在下面的方法中

发送数据

现在,是时候学习一些发送数据的魔法咒语了。每当后端有新的数据更新时,我们就可以调用 sendToClients 方法,让这些数据像小精灵一样飞到每个客户端。

    public void sendToClients() {
        List<User> users = userMapper.getUsers();
        for (SseEmitter emitter : emitters) {
            try {
                emitter.send(users);
            } catch (IOException e) {
                emitter.completeWithError(e);
            }
        }
    }

前端实现

接下来,在前端的世界里,我们需要打开一个魔法视窗来接收这些数据。这个魔法视窗就是 JavaScript 的 EventSource。

<!DOCTYPE html>
<html>
<head>
    <title>SSE Example</title>
</head>
<body>
<div id="sse-data"></div>

<script>
    const sseData = document.getElementById("sse-data");

    const eventSource = new EventSource("/user/get");

    eventSource.onmessage = (event) => {
        sseData.innerHTML = event.data;
    };

    eventSource.onerror = (error) => {
        console.error("SSE Error:", error);
    };
</script>
</body>
</html>

整合流程

最后,让我们把这一切魔法整合在一起。启动你的 SpringBoot 应用,打开你的前端页面,你就会看到数据像水一样流畅地在你眼前流淌。不再是冰冷的静态页面,你的应用现在生动、活泼,充满了魔法的力量!文章来源地址https://www.toymoban.com/news/detail-784345.html

到了这里,关于用 SpringBoot 和 SSE 打造动态前端更新的终极指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AJAX 前端开发利器:实现网页动态更新的核心技术

    AJAX是开发者的梦想,因为你可以: 在不重新加载页面的情况下更新网页 在页面加载后请求来自服务器的数据 在页面加载后接收来自服务器的数据 在后台向服务器发送数据 HTML页面 HTML页面包含一个 div 部分和一个 button div 部分用于显示来自服务器的信息 button 调用一个函数(

    2024年03月22日
    浏览(42)
  • 打造专业级ChatGPT风格聊天界面:SpringBoot与Vue实现动态打字机效果,附完整前后端源码

    大家好,今天用 SpringBoot 、 vue 写了一个仿ChatGPT官网聊天的打字机效果。 所有代码地址:gitee代码地址 ,包含前端和后端,可以直接运行 使用本技术实现的项目:aicnn.cn,欢迎大家体验 如果文章知识点有错误的地方,请指正!大家一起学习,一起进步。 本文主要应用的技术有

    2024年01月24日
    浏览(41)
  • 前端实现chatGpt流式输出 - SSE

    一、chatGpt流式输出技术分析 在使用ChatGPT时,模型的回复内容是连续输出,而不是整段话直接出现,因为模型需要不断预测接下来要回复什么内容,如果等整段回复生成之后再输出到网页,用户体验就会很差,后面才了解到使用SSE技术可以实现。 相关知识小tips 长轮询:客户

    2024年03月18日
    浏览(34)
  • springboot整合sse

    链接: SpringBoot 实现SSE 服务器发送事件 链接: SpringBoot 实现SSE 服务器发送事件 链接: Springboot之整合SSE实现消息推送 链接: springboot SseEmitter 消息推送 链接: 在springboot中使用Sse(Server-sent Events)Web实时通信技术-服务器发送事件SseEmitter 链接: Web 实时消息推送详解 链接: SSE(Server-S

    2024年01月18日
    浏览(27)
  • NFTFi终极指南

    NFT是一种投资还是一种数字收藏品——对于那些活跃在行业的人来说,这是我最喜欢的问题之一。 建设者倾向于“不是投资”,因为,美国SEC主席Gary Gensler正在看着你。此外,如果地板价没有上涨,它可以减轻建设者对其持有者的一些责任以提供利润(这不是投资,它是社区

    2024年01月24日
    浏览(28)
  • 企业全渠道营销终极指南

    客户不再在单一的渠道购物,渠道跳跃正在成为全球流行的消费者购物行为。他们用多种渠道与品牌互动,包括社交媒体、电子邮件等,这迫使企业必须采用全渠道营销策略来满足客户不断变化的需求,为客户提供个性化的体验,提高客户忠诚度并推动更多销售。但是所有渠

    2024年02月15日
    浏览(42)
  • Midjourney终极指南:提示的艺术

    ​关注文章下方公众号,即可免费获取AIGC最新学习资料 导读: 通过制作完美的提示,发现使用Midjourney生成令人惊叹的图像的秘密。在这个终极指南中,将带您完成创建有效提示的过程,这将释放Midjourney AI的全部潜力,从而产生与您的创意愿景相匹配的令人惊叹的视觉效果

    2024年02月10日
    浏览(29)
  • 终极指南!Terraform的进阶技巧

    如果您已经对 Terraform 了如指掌,并期望自己的 IaC 技能有进一步提升的话,这篇文章很适合您!在本文中,我们将分享一些 Terraform 的高级使用技巧。从使用模块(module)、工作区(workspace)到管理远程状态存储、自定义 provider等技巧,帮助您轻松、高效地管理基础设施。无

    2024年02月07日
    浏览(33)
  • chatGPT流式输出前端实现fetch、SSE、websocket

    fetch 本身不直接支持流式输出,但你可以使用 ReadableStream 和 TextDecoder 等 Web Streams API 来实现类似的效果。 在 SSE 中,浏览器通过发送 HTTP GET 请求到服务器上特定的 SSE 端点(endpoint),然后服务器通过该连接发送事件(event)和相关数据到客户端,故SSE 主要使用 GET 请求。E

    2024年02月04日
    浏览(33)
  • Mac环境下Alist+Aria2+Rclone打造网盘下载终极解决方案——以115网盘为例

    本文无意探究115网盘的好坏,也并非是要推崇特定产品,只是提供一套解决方案,其他网盘也可以使用。经历多轮环境的风云变换,115还是活了下来,说明115还是经受住了市场的考验。问题的关键在于115网盘的门槛另很多人望而却步,小众带来的问题便是相关的配套的生态不

    2024年02月04日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包