本文由宅小年分享,感谢原作者,即时通讯网有修订和重新排版。
cover_opti.png (19.09 KB, 下载次数: 438)
下载附件 保存到相册
4 个月前 上传
1.png (29.37 KB, 下载次数: 600)
2.png (49.4 KB, 下载次数: 552)
3.png (29.48 KB, 下载次数: 581)
<script> const eventSource = new EventSource('/sse/stream'); eventSource.onmessage = function(event) { console.log('收到消息:', event.data); // 可更新到页面上 }; eventSource.onerror = function(err) { console.error('连接出错', err); // 可以展示连接断开的提示 }; </script>
@RestController publicclass SseController { privatestaticfinal Map<String, SseEmitter> emitters = new ConcurrentHashMap<>(); // 浏览器连接入口 @GetMapping("/sse-connect") public SseEmitter connect(@RequestParam String userId) { SseEmitter emitter = new SseEmitter(30 * 60 * 1000L); // 30分钟超时 emitters.put(userId, emitter); // 发送欢迎消息 try { emitter.send(SseEmitter.event() .name("welcome") .data("🎉 连接成功!欢迎使用 SSE 服务")); } catch (IOException e) { System.err.println("发送欢迎消息失败: " + e.getMessage()); } emitter.onCompletion(() -> emitters.remove(userId)); emitter.onTimeout(() -> emitters.remove(userId)); return emitter; } // 模拟推送服务 @Scheduled(fixedRate = 2000) public void pushData() { emitters.forEach((userId, emitter) -> { try { String json = String.format( "{\"time\": \"%s\", \"value\": %.2f}", LocalTime.now(), Math.random() * 100 ); // 构建符合SSE格式的消息 emitter.send(SseEmitter.event() .id(UUID.randomUUID().toString()) .name("system-metrics") .data(json)); } catch (IOException e) { emitters.remove(userId); } }); } }
curl --location 'localhost:18500/sse-connect?userId=1' \ --header 'Key: Accept' \ --header 'Value: text/event-stream'
4.png (38.95 KB, 下载次数: 429)
写在最后:Web 开发永远不止一种解决方案。选择最合适的技术,而不是最“酷”的技术,才是工程师的智慧体现。
来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
一套纯血鸿蒙NEXT产品级IM系统。
详细介绍 / 产品截图 / 安装
精华主题数超过100个。
积极发起、参与各类话题的讨论等,主题、发帖内容较有价值。
连续任职达1年以上的合格正式版主
为论区做出突出贡献的开发者、版主等。
Copyright © 2014-2026 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.279308 second(s), 40 queries , Gzip On.