Server-Sent Events (SSE) 实现从服务器到客户端的实时数据流

9a69fede8b2044a79dd834e3e48f20b4.png前期回顾   

避免阻塞主线程 —— Web Worker 示例项目-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_57904695/article/details/136721297?spm=1001.2014.3001.5501

目录

@CSDN 彩色之外

📝 前言

🛠️ 安装

✂️ 运行服务器

✂️ 运行index.html

♻️ 贡献


仓库点我👉及时推送到客户端消息

@CSDN 彩色之外

📝 前言

Server-Sent Events (SSE) 是什么?

Server-Sent Events (SSE) 是一种允许服务器主动向客户端发送更新的技术。与 WebSocket 不同,SSE 是单向通信,仅从服务器到客户端。这对于实时更新场景(如股票价格更新、新闻订阅、天气推送、每日笑话等)非常有用,而且实现起来比 WebSocket 简单。

 这个项目演示了如何使用 Server-Sent Events (SSE) 实现从服务器到客户端的实时数据流。它包括一个简单的 Node.js 服务器,使用 Express 框架设置 SSE 端点,以及一个 HTML 页面,通过 EventSource 接口接收来自服务器的消息。

 服务器每秒像客户端发送一次服务端生成的时间

 index.html

<!DOCTYPE html>
<html lang="zh"><head><meta charset="UTF-8"><title>EventSource 示例</title>
</head><body><h2>服务器发送的消息:</h2><ul id="messages"></ul><script>// 创建一个指向你的服务器端点的 EventSource 实例var eventSource = new EventSource('http://localhost:3000/events');// 使用 onmessage 事件监听器来接收消息eventSource.onmessage = function (event) {// 获取消息列表的元素var messagesElement = document.getElementById('messages');// 创建一个新的列表项元素,并设置其内容为接收到的消息var messageElement = document.createElement('li');messageElement.textContent = event.data;// 将新的列表项添加到消息列表中messagesElement.appendChild(messageElement);};// 监听错误事件eventSource.onerror = function (error) {console.error('EventSource failed:', error);// 在出现错误时关闭 EventSourceeventSource.close();};</script>
</body></html>

server.js 

const express = require("express");
const cors = require("cors");
const app = express();
const PORT = 3000;// 设置根URL的GET路由
app.get("/", (req, res) => {res.send(`<b>Hello, World!</b> - <br>使用 VS Code 的 Five Server<br> 1. 在 VS Code 中安装 Five Server 扩展。<br> 2. 与 Live Server 类似,重启 VS Code,打开你的项目文件夹。<br> 3. 找到你的 HTML 文件,右键点击并选择“Open with Five Server”。`);
});// 允许跨域请求
app.use(cors());app.get("/events", (req, res) => {res.setHeader("Content-Type", "text/event-stream");res.setHeader("Cache-Control", "no-cache");res.setHeader("Connection", "keep-alive");// 发送消息到客户端const sendMessage = () => {const data = `服务器时间: ${new Date()}`;res.write(`data: ${data}\n\n`);// 每秒发送一次setTimeout(sendMessage, 1000);};sendMessage();
});app.listen(PORT, () => {console.log(`服务器运行在 http://localhost:${PORT}`);
});

🛠️ 安装

npm install express cors

✂️ 运行服务器

node server.js

> 在项目目录中,运行以上命令来启动服务器:

> 你将看到控制台输出,表明服务器已经在 http://localhost:3000 上运行。

 ✂️ 运行index.html

使用 VS Code 的 Five Server

1. 在 VS Code 中安装 Five Server 扩展。

2. 与 Live Server 类似,重启 VS Code,打开你的项目文件夹。

3. 找到你的 HTML 文件,右键点击并选择“Open with Five Server”。

 

 功能描述

   > 服务器 (server.js): 设置一个 SSE 端点 /events,每秒向客户端发送当前时间。

   > 客户端 (index.html): 使用 EventSource 接口连接到 SSE 端点,并在页面上显示接收到的消息。

   技术栈

   > Node.js: 服务器环境。

   > Express: Node.js 的 web 应用框架,用于设置 SSE 端点。

   > CORS: 用于解决跨域请求的问题。

   > HTML/JavaScript: 客户端页面和逻辑。

♻️ 贡献

如果你有任何改进的建议或想要贡献代码,请随时创建 pull 请求或提交问题。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/746406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

身份证查询-身份认证-javascript实名认证接口-

翔云身份证实名认证接口将与网络平台携手共筑信息安全防线&#xff0c;守护每一笔交易的真实可信&#xff0c;助力您的企业在数字化浪潮中稳健前行&#xff01; 以下是javascript语言调用翔云身份证实名认证API的代码&#xff1a; var form new FormData(); form.append("…

引领短剧风尚,打造全新观影体验——短剧APP开发之旅

随着移动互联网的迅猛发展&#xff0c;短视频和短剧成为了大众休闲娱乐的新宠。为了满足用户对于高质量、快节奏内容的需求&#xff0c;我们决定开发一款全新的短剧APP&#xff0c;为用户带来前所未有的观影体验。 这款短剧APP将集合丰富多样的短剧资源&#xff0c;涵盖各种题…

了解什么是 Redis 的雪崩、穿透和击穿?Redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 Redis 的穿透?

目录 一、面试官心理分析 二、面试题剖析 1. 缓存雪崩 2. 缓存穿透 3. 缓存击穿 一、面试官心理分析 其实这是问到缓存必问的&#xff0c;因为缓存雪崩和穿透&#xff0c;是缓存最大的两个问题&#xff0c;要么不出现&#xff0c;一旦出现就是致命性的问题&#x…

B/S基于云计算的云HIS智慧医院管理系统源码带电子病历编辑器

目录 一、系统概述 二、开发环境 三、系统功能 1、门诊部分 2、住院部分 3、电子病历 4、药物管理 5、统计报表 6、综合维护 7、运营运维 云HIS系统&#xff1a;病案首页 云his系统源码 SaaS应用 功能易扩 统一对外接口管理 现如今&#xff0c;大数据、云计算、移动…

c# 编辑、删除一条数据

1、编辑数据 [HttpPost] public MessageModel<string> Put([FromBody] Dtable request) { var data new MessageModel<string>(); request.UPDATETIME DateTime.Now; if (request.ID>0) { …

案例:MySQL 主从复制与读写分离

1.案例环境 一、准备五台主机 Master&#xff1a;操作系统CentOS 7.3x86_74、IP地址192.168.17.10。Slave1&#xff1a;操作系统CentOS 7.3x86_74、IP地址192.168.17.20。Slave2&#xff1a;操作系统CentOS 7.3x86_74、IP地址192.168.17.30。Amoeba&#xff1a;操作系统CentO…

HDOJ 2048

神、上帝以及老天爷 Problem Description HDU 2006’10 ACM contest的颁奖晚会隆重开始了&#xff01; 为了活跃气氛&#xff0c;组织者举行了一个别开生面、奖品丰厚的抽奖活动&#xff0c;这个活动的具体要求是这样的&#xff1a; 首先&#xff0c;所有参加晚会的人员都将一…

python | pop()和remove()方法

pop()与remove()方法都是删除列表中的元素&#xff0c;但删除的位置不同 ① pop()&#xff1a;删除列表中的最后一个元素 ② remove()&#xff1a;可以删除列表中的某一个值 如果某一个值有多个&#xff0c;则删除第一个&#xff08;即最左边出现的那一个&#xff09; li[…

【WPF】Canvas的Path画线 颜色值偏差和面积不准确

图像中左上角2个红色线段 颜色值有偏差&#xff0c;且线段高度不准确&#xff08;我设置的是Red,1&#xff09;。 解决方案&#xff1a; 1、PathGeometry PathFigure LineSegment 2、Stretch设置Fill <Path Stretch"Fill" Stroke"Red"…

Axure软件安装汉化教程

Axure软件安装汉化教程 一、准备教程 下载Axure的软件&#xff0c;并解压打开 二、安装过程 双击Axure软件的运行程序&#xff0c;修改安装程序的路径&#xff0c;默认下一步即可。 三、软件汉化 打开Axure的软件安装路径&#xff0c;将汉化包复制粘贴进入到Axure RP 9安装…

C语言从入门到实战————数组和指针的深入理解

前言 在C语言中&#xff0c;数组和指针有的密切得联系&#xff0c;因为数组名本身就相当于一个指针常量。指针是一个变量&#xff0c;专门用来存储另一个变量的内存地址&#xff0c;通过这个地址可以访问和操作该变量的值&#xff0c;同时也包括数组。数组是一组连续存储的同类…

什么是云?公共云,私有云,混合云分别是什么?云概念的提出 白话总结

一、什么是云 “云” 通常是指云计算环境&#xff0c;非本地化的计算环境。即我们没有环境或者机器&#xff0c;那么可以将我们的提供的服务部署到云计算环境&#xff0c;而这个环境是由其他运营商来提供和维护。 也可以理解为我们将我们的产品或者计算服务部署在远端网络。 …

【CKA模拟题】查询消耗CPU最多的Pod

题干 For this question, please set this context (In exam, diff cluster name) 对于此问题&#xff0c;请设置此上下文&#xff08;在考试中&#xff0c;diff 集群名称&#xff09; kubectl config use-context kubernetes-adminkubernetesFind the pod that consumes the …

QT信号与槽实现方式

1、第一种实现方式 在QT开发工具UI界面先拖入按钮&#xff0c;然后鼠标右键拖入按钮&#xff0c;点击选中槽&#xff0c;在页面选着需要的信号&#xff0c;然后OK&#xff0c;随即将会跳转到类的.cpp文件&#xff0c;&#xff08;这种UI代码结合的方式&#xff0c;会自动去绑定…

kruakal算法(P3603,3366)

[图论与代数结构 301] 最短树问题_1 - 洛谷 分三步,输入,排序,并查集连接n次 using ll long long; constexpr int N 2e5 5; constexpr int M 5e5 5; ll ans, sum, n, m;struct DSU {std::vector<int> f, siz;DSU() {}DSU(int n) {init(n);}void init(int n) {f.re…

ArrayList 是线程安全的么?

1、典型回答 ArrayList 是非线程安全的数据结构 多线程环境下&#xff0c;如果多个线程同时对同一个 ArrayList 进行添加、删除或修改操作&#xff0c;可能会导致数据不一致或发生异常。这是因为&#xff0c;ArrayList 在内部实现时&#xff0c;并没有添加任何线程同步的机制…

服务器做raid几好

服务器应该做RAID几?RAID是一种将多块独立的硬盘存储数据跟其它硬盘进行存储管理的方法。 RAID是一种存储性能、数据安全和校验等技术,可用于提高数据存储的安全性和可靠性。由于去中心化的方式,它可以保证数据 在所有的硬盘中只有一个硬盘,因为存储性能不需要像硬盘那样根据需…

如何在项目中应用“API签名认证”

❤ 作者主页&#xff1a;李奕赫揍小邰的博客 ❀ 个人介绍&#xff1a;大家好&#xff0c;我是李奕赫&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 记得点赞、收藏、评论⭐️⭐️⭐️ &#x1f4e3; 认真学习!!!&#x1f389;&#x1f389; 文章目录 为什么需要AP…

windows脚本启动程序的方式

1. 获取管理员权限并运行程序 powershell -command "Start-Process -Verb RunAs -FilePath xxx.exe -ArgumentList parameters......" 2. 无须管理员权限 powershell -command "Start-Process -FilePath xxx.exe -ArgumentList parameters......"

ORBSLAM3与GPS进行松组合

文章目录 预备知识orbslam3vins-fusion中的GPS融合策略数据准备环境准备更改配置globalOptNode.cpp代码运行融合结果预备知识 orbslam3 ORBSLAM3 是一个最新的视觉SLAM(Simultaneous Localization and Mapping)系统,它建立在成功的 ORBSLAM2 系统的基础上,引入了多种新的…