客户端接收 text/event-stream

html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Event Stream Demo</title>
<style type="text/css">
body {
font-family: Arial, sans-serif;
text-align: center;
}
#event-stream-data {
margin: 50px auto;
max-width: 600px;
border: 1px solid #ccc;
padding: 10px;
}
</style>
</head>
<body>
<div id="event-stream-data"></div> <script>
const eventStreamDataElement = document.getElementById('event-stream-data');
function handleEventStreamMessage(event) {
console.log(event)
const eventText = event.data;
displayEvent(eventText);
} function displayEvent(eventText) {
const eventElement = document.createElement('p');
eventElement.textContent = eventText;
eventStreamDataElement.appendChild(eventElement);
} function connectToEventStream() {
fetch('http://localhost:8004/website/events', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
data: 'example'
}) // Replace with your POST data
})
.then(response => {
const reader = response.body.getReader();
const decoder = new TextDecoder(); return reader.read().then(function processResult(result) {
console.log(result)
if (result.done) {
return;
} const chunk = decoder.decode(result.value, {
stream: true
});
handleEventStreamMessage({
data: chunk
}); return reader.read().then(processResult);
});
})
.catch(error => {
console.error('Error occurred while fetching event stream:', error);
});
}
connectToEventStream();
</script>
</body>
</html>

服务端发送(springboot)

    @PostMapping(value = "/events", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter eventStream(@RequestBody Object obj) {
SseEmitter emitter = new SseEmitter();
System.out.println(obj.toString());
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
executorService.scheduleAtFixedRate(() -> {
try {
// 模拟产生一条事件数据
String eventData = "Event data: " + System.currentTimeMillis();
emitter.send(SseEmitter.event().data(eventData));
} catch (IOException e) {
emitter.complete();
}
}, 0, 1, TimeUnit.SECONDS);
return emitter;
}

text/event-stream协议的更多相关文章

  1. [Reactive Programming] Using an event stream of double clicks -- buffer()

    See a practical example of reactive programming in JavaScript and the DOM. Learn how to detect doubl ...

  2. [html5] 学习笔记-服务器推送事件

    1.HTML5服务器推送事件介绍 服务器推送事件(Server-sent Events)是Html5规范的一个组成部分,可以用来从服务端实时推送数据到浏览器端. 传统的服务器推送技术----WebSo ...

  3. 《Web性能权威指南》

    <Web性能权威指南> 基本信息 原书名:High performance browser networking 原出版社: O'Reilly Media 作者: (加)Ilya Grig ...

  4. Web性能权威指南 PDF扫描版​

    Web性能权威指南是谷歌公司高性能团队核心成员的权威之作,堪称实战经验与规范解读完美结合的产物.<Web性能权威指南>目标是涵盖Web开发者技术体系中应该掌握的所有网络及性能优化知识.全书 ...

  5. HTTP协议开发应用-HTTP&XML协议栈开发

    Netty HTTP+XML协议栈开发 由于HTTP协议的通用性,很多异构系统间的通信交互采用HTTP协议,通过HTTP协议承载业务数据进行消息交互,例如非常流行的HTTP+XML或者RESTful+ ...

  6. 多点触摸(MT)协议(翻译)

    参考: http://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt 转自:http://www.arm9home.ne ...

  7. 内核中的多点触摸协议文档 Multi【转】

    转自:http://www.arm9home.net/read.php?tid=24754 前段时间改写了一个GT801的内核驱动,仔细阅读 MT Event 上报的时候,发现这个驱动是针对 Andr ...

  8. Stream computing

    stream data 从广义上说,所有大数据的生成均可以看作是一连串发生的离散事件.这些离散的事件以时间轴为维度进行观看就形成了一条条事件流/数据流.不同于传统的离线数据,流数据是指由数千个数据源持 ...

  9. zz:NETCONF协议详解

    随着SDN的大热,一个诞生了十年之久的协议焕发了第二春,它就是NETCONF协议.如果你在两年前去搜索NETCONF协议,基本得到的信息都是"这个协议是一个网管协议,主要目的是弥补SNMP协 ...

  10. XMPP即时通讯协议使用(十二)——基于xmpp搭建简单的局域网WebRTC

    创建HTML和JS ofwebrtc.html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...

随机推荐

  1. 1.NCC算法实现及其优化[基础实现篇]

    NCC算法实现及其优化 本文将集中探讨一种实现相对简单,效果较好的模板匹配算法(NCC) \[R(x,y)= \frac{ \sum_{x',y'} (T'(x',y') \cdot I'(x+x', ...

  2. 我只用了3步,实现了一个逼真的3D场景渲染

    给3D模型及环境场景渲染出兼具质感和真实感的材质效果,需要经历几步? 显然,目前的3D模型材质渲染技术,还无法实现简单几步就能搞定的标准化作业来量化,完成一个质量过关的3D模型渲染,一般需要: 1.准 ...

  3. JS-鼠标点击出现爱心

    新建js文件,将代码复制到js文件中,然后在HTML文件中引入js,这样鼠标点击后就可以出现爱心 // js.js !function(e, t, a) { function r() { for (v ...

  4. .NET服务发现(Microsoft.Extensions.ServiceDiscovery)集成Consul

    随着Aspire发布preview5的发布,Microsoft.Extensions.ServiceDiscovery随之更新, 服务注册发现这个属于老掉牙的话题解决什么问题就不赘述了,这里主要讲讲M ...

  5. 照骗qsnctfwp

    题目附件 使用 010 Editor 等工具打开发现 flag.txt 字样 将图片保存至 Kali 使用工具 foremost,通过命令foremost 3.png即可分离处图片所含隐写文件 打开发 ...

  6. cv2在图像上画不同比例的锚框

    ''' cv2在图像上画不同比例的锚框 ''' import cv2 import math # 画宽高比1:1的锚框 def display_11_anchor(img,anchor_11_left ...

  7. Greenplum Jdbc 调用 SETOF refcursor

    最近公司需要用Greenplum,在调用 jdbc的时候遇到了一些问题.由于我们前提的业务都是使用 sqlserver,sqlserver的 procedure 在前端展示做数据源的时候才用的非常多, ...

  8. Linq大白话深入浅出从零基础到手写开源工具兵贵神速系列(一)——为啥需要Linq

    所有的技术创新都是为了解决编程实践中的难点和痛点! 如果我们不懂得这项技术所要解决的难点和痛点,我们在使用这项技术的时候就很可能走偏,在细节末节上隔靴搔痒,耗费很长的时间还掌握不了这项技术的精髓! 而 ...

  9. 剑指offer51(Java)-数组中的逆序对(困难)

    题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例1: 输入: [7,5,6,4] 输出: 5 限制: 0 &l ...

  10. 力扣419(java)-甲板上的战舰(中等)

    题目: 给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 'X' 或者是一个空位 '.' ,返回在甲板 board 上放置的 战舰 的数量. 战舰 只能水平或者 ...