首页 > web前端 > js教程 > 正文

JavaScript_SSE服务器发送事件应用

betcha
发布: 2025-11-18 15:33:07
原创
110人浏览过
SSE是服务器向浏览器单向推送数据的技术,基于HTTP、使用EventSource API实现,适合实时更新场景。1. 前端通过new EventSource()连接后端接口,onmessage接收数据;2. 后端返回Content-Type为text/event-stream,按格式发送data、event、id、retry字段;3. 支持自定义事件监听与断线重连,浏览器自动携带Last-Event-ID恢复;4. 适用于日志监控、行情推送等服务端频繁推送场景,但不支持二进制和IE,需注意代理缓冲配置。

javascript_sse服务器发送事件应用

服务器发送事件(Server-Sent Events,简称SSE)是一种让服务器通过HTTP连接将数据“推送”到浏览器的技术。与WebSocket不同,SSE是单向的——仅从服务器到客户端,适合用于实时更新场景,比如股票行情、新闻推送、日志监控等。JavaScript中的EventSource API为实现SSE提供了原生支持,使用起来简单高效。

基本用法:建立SSE连接

前端JavaScript中,只需创建一个EventSource实例并指向后端提供的SSE接口即可:

const eventSource = new EventSource('/api/stream');

eventSource.onmessage = function(event) {
  console.log('收到消息:', event.data);
  // 更新页面内容
  document.getElementById('output').innerText += event.data + '\n';
};

eventSource.onerror = function(err) {
  console.error('SSE连接出错:', err);
};
登录后复制

只要服务器保持连接,后续推送的消息都会触发onmessage回调。

后端实现:发送符合格式的数据

SSE要求服务器返回的内容类型为text/event-stream,并且消息需遵循特定格式。每条消息可以包含以下字段:

立即学习Java免费学习笔记(深入)”;

  • data: 消息正文
  • id: 事件ID,用于断线重连时定位位置
  • event: 自定义事件名称(可选)
  • retry: 重连间隔(毫秒)

例如Node.js(Express)后端示例:

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

  const sendEvent = (data) => {
    res.write(`data: ${JSON.stringify(data)}\n\n`);
  };

  // 模拟定时推送
  const interval = setInterval(() => {
    sendEvent({ time: new Date().toISOString(), value: Math.random() });
  }, 2000);

  // 客户端断开时清理
  req.on('close', () => {
    clearInterval(interval);
    res.end();
  });
});
登录后复制

处理自定义事件和断线重连

除了默认的message事件,服务器还可以发送自定义事件:

DM建站系统律师事务所HTML5网站模板1.7
DM建站系统律师事务所HTML5网站模板1.7

DM建站系统律师事务所HTML5网站模板, DM企业建站系统。是由php+mysql开发的一套专门用于中小企业网站建设的开源cms。DM系统的理念就是组装,把模板和区块组装起来,产生不同的网站效果。可以用来快速建设一个响应式的企业网站( PC,手机,微信都可以访问)。后台操作简单,维护方便。DM企业建站系统安装步骤:第一步,先用phpmyadmin导入sql文件。 第二步:把文件放到你的本地服务器

DM建站系统律师事务所HTML5网站模板1.7 0
查看详情 DM建站系统律师事务所HTML5网站模板1.7
// 后端发送
res.write('event: notification\ndata: {"msg": "新通知"}\n\n');
登录后复制

前端监听该事件:

eventSource.addEventListener('notification', function(event) {
  const data = JSON.parse(event.data);
  alert('提醒:' + data.msg);
});
登录后复制

浏览器会自动尝试重连(默认约3秒),可通过retry字段调整:

res.write('retry: 5000\n');
登录后复制

若设置了id,浏览器会在重连请求中携带Last-Event-ID头,可用于恢复断点。

适用场景与注意事项

SSE适用于服务端频繁推送、客户端只读的场景,优势在于基于HTTP、兼容性好、自动重连、轻量。但注意以下几点:

  • 每个EventSource连接对应一个HTTP/1.1长连接,过多连接可能影响服务器性能
  • 不支持二进制数据,只能传输UTF-8文本
  • IE和旧版浏览器不支持EventSource,必要时可用polyfill
  • 反向代理(如Nginx)需配置关闭缓冲,防止延迟输出

基本上就这些,SSE是一种简单实用的实时通信方案,尤其适合不需要双向交互的推送需求。

以上就是JavaScript_SSE服务器发送事件应用的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号