新闻中心

什么是j*ascript服务器推送_Server-Sent Events如何工作?

2025-12-13
浏览次数:
返回列表
SSE 是服务器单向持续推送数据的轻量级 HTTP 机制。基于长连接,服务器保持响应打开并按 data: 格式写入,客户端用 EventSource 监听;需设置 text/event-stream 响应头、正确换行,支持自动重连与自定义事件。

什么是javascript服务器推送_server-sent events如何工作?

J*aScript 服务器推送(Server-Sent Events,SSE)是一种让服务器**单向、持续地向浏览器发送数据**的轻量级机制。它不是双向通信(不像 WebSocket),也不依赖轮询(不像传统 AJAX 轮询),而是基于 HTTP 的长连接,由服务器主动“推”数据给客户端。

Server-Sent Events 的核心原理

SSE 基于一个持久的 HTTP 连接:浏览器发起一次 GET 请求,服务器保持连接打开,并在有新数据时,按特定格式逐条写入响应流。浏览器内置的 EventSource API 自动解析这些数据,触发事件。

关键点:

  • 协议是纯文本,每条消息以 data: 开头,可选带 id:(用于断线重连)、event:(自定义事件名)、retry:(重连间隔毫秒)
  • 服务器必须设置响应头:Content-Type: text/event-streamCache-Control: no-cache
  • 连接默认在断开后自动重试(约 3 秒),支持手动关闭
  • 只支持服务器 → 浏览器方向,适合实时通知、日志流、股票行情等场景

前端怎么用 EventSource?

只需创建 EventSource 实例,监听事件即可:

<script><br> const source = new EventSource("/api/notifications");<br> <br> source.onmessage = function(event) {<br> console.log("收到普通消息:", event.data);<br> };<br> <br> source.addEventListener("update", function(event) {<br> console.log("收到 update 类型消息:", event.data);<br> });<br> <br> source.onerror = function(err) {<br> console.error("SSE 连接出错", err);<br> };<br> </script>

注意:EventSource 只支持 GET,不携带 Cookie(除非显式配置 withCredentials: true),且跨域需服务器返回 Access-Control-Allow-Origin

Musho Musho

AI网页设计Figma插件

Musho 76 查看详情 Musho

后端如何发送 SSE 数据?(以 Node.js Express 为例)

关键是保持响应不结束、正确设置头部、按格式输出:

app.get('/api/notifications', (req, res) => {
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
});

// 发送一条消息
res.write('data: {"msg": "欢迎连接"}\n\n');

// 每 2 秒推送一次更新
const interval = setInterval(() => {
res.write(`data: {"time": "${new Date().toISOString()}"}` + '\n\n');
}, 2000);

req.on('close', () => {
clearInterval(interval);
res.end();
});
});

真实项目中建议使用流式响应工具(如 Express 的 res.flush() 或更可靠的库如 sse-express)来确保数据及时写出,避免缓冲阻塞。

基本上就这些。SSE 不复杂但容易忽略响应头和换行格式——只要服务端按规范吐数据,前端用 EventSource 监听,就能实现低延迟、低开销的服务器推送。

以上就是什么是j*ascript服务器推送_Server-Sent Events如何工作?的详细内容,更多请关注其它相关文章!


# 按需  # 辽源网站优化报价表  # 宝洁营销推广案例  # 上市公司建设网站有哪些  # 伊春seo  # 个人企业网站建设  # 南充定制网站建设优化  # 关键词挖掘网站排名优化  # 德清网站推广公司  # seo首荐11火星  # 时代seo优化靠谱吗  # 是一种  # 也不  # 加载  # 客户端  # 换行  # javascript  # 点对点  # 自定义  # 不像  # 如何实现  # acces  # app  # 浏览器  # cookie  # node  # ajax  # node.js  # 前端  # js  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析  html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】  Node.js中HTML按钮与J*aScript函数交互的正确姿势  向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程  拼多多赚钱渠道_拼多多收益来源  蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址  outlook中文官网入口地址 outlook官方中文版直达首页链接  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  12306选座怎么选到临时改签座_12306改签选座策略与步骤  Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程  如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension  批改网学生版PC登录 批改网官网登录系统入口  印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】  CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题  漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接  妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画  虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作  2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC  Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达  随机参数递归函数的基准调用次数与时间复杂度探究  顺丰快递查询系统 官方正版查询入口  J*a最大堆Heapify方法修复:索引计算与边界条件深度解析  在Blazor WebAssembly应用中动态注入客户端特定指标代码的策略  淘宝网网页版登录入口 淘宝官方网页版快捷登录  高德地图怎么看全景照片_高德地图全景照片浏览教程  网易大神账号申诉需要多久_网易大神账号申诉流程说明  C++如何操作注册表_Windows平台下C++读写注册表的API函数详解  微博网页版官方账号登录 微博网页版内容浏览使用指南  动漫岛观看全网网 动漫岛在线正版动漫入口  俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口  将JSON对象数组转置为键值对列表的实用指南  12306选座怎么选到特殊座位_12306特殊座位选择注意事项  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程  QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台  Lar*el如何正确地在控制器和模型之间分配逻辑_Lar*el代码职责分离与架构建议  Go语言中动态执行代码字符串的策略与实践  微信网页版登录教程_微信网页版登录入口在哪  TikTok网页版直接登录 TikTok网页端官方平台入口  解决Python单元测试中Mock异常方法调用计数为零的问题  12306几点到几点不能订票? | 官方最新系统维护时间全解析  Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南  不会效仿卡普空!《铁拳》制作人澄清:不采取赛事付费|直播|  Go Martini框架:动态服务解码后的图片内容  谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航  手机屏幕碎了但能正常使用怎么办 手机外屏碎裂的修复建议  Angular中单选按钮的正确使用与常见陷阱解析  c++项目目录结构应该如何组织_c++工程化项目结构规范  Golang如何优雅处理error_Golang error处理最佳实践总结  C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图 

搜索