首页 > 其他分享 >EventSource事件流(允许网页与服务器之间建立一个持久的连接,服务器可以通过这个连接向客户端推送更新)

EventSource事件流(允许网页与服务器之间建立一个持久的连接,服务器可以通过这个连接向客户端推送更新)

时间:2024-08-29 16:05:07浏览次数:12  
标签:console 连接 eventSource EventSource event 服务器之间 客户端

 

EventSource 是 JavaScript 中用于处理服务器发送事件(Server-Sent Events, SSE)的接口。它允许网页与服务器之间建立一个持久的连接,服务器可以通过这个连接向客户端推送更新。

EventSource 通常用于需要实时更新数据的场景,比如实时通知、股票价格更新等。

 

基本用法

// 创建一个 EventSource 对象,并连接到指定的 URL
const eventSource = new EventSource('https://your-server.com/sse');

// 监听消息事件,当服务器发送消息时触发
eventSource.onmessage = function(event) {
  console.log('New message:', event.data);
};

// 监听连接打开事件
eventSource.onopen = function() {
  console.log('Connection to server opened.');
};

// 监听错误事件
eventSource.onerror = function(event) {
  console.error('Error occurred:', event);
  if (eventSource.readyState === EventSource.CLOSED) {
    console.log('Connection was closed.');
  }
};

// 关闭连接
// eventSource.close();

关键概念和属性

  1. 构造函数

    • new EventSource(url, [options])
    • url: SSE 服务器的 URL。
    • options: 可选参数,通常不需要。
  2. 主要事件

    • onmessage: 当服务器发送消息时触发。
    • onopen: 当连接成功打开时触发。
    • onerror: 当连接出现错误或关闭时触发。
  3. readyState 属性

    • EventSource.CONNECTING (0): 正在建立连接。
    • EventSource.OPEN (1): 连接已建立,可以接收事件。
    • EventSource.CLOSED (2): 连接已关闭,不会接收更多事件。
  4. close() 方法

    • eventSource.close(): 手动关闭连接。

 

示例解释

new EventSource(sseAlarmUrl, { reconnectTime: 3000 });

这个示例创建了一个 EventSource 实例,连接到 sseAlarmUrl 指定的服务器 URL,选项 { reconnectTime: 3000 } 表示在连接断开后,客户端会在 3000 毫秒(3 秒)后尝试重新连接。

服务器端实现(简单示例)

在服务器端,你需要支持 SSE。例如,使用 Node.js 实现 SSE:

const http = require('http');

http.createServer((req, res) => {
  if (req.url === '/sse') {
    res.writeHead(200, {
      'Content-Type': 'text/event-stream',
      'Cache-Control': 'no-cache',
      'Connection': 'keep-alive',
    });
    
    setInterval(() => {
      res.write(`data: ${new Date().toLocaleTimeString()}\n\n`);
    }, 1000);
  }
}).listen(3000);

console.log('Server running at http://localhost:3000/sse');

这个示例会每秒钟向客户端推送当前时间。

总结

EventSource 是一种轻量级的技术,用于从服务器推送实时更新到客户端。它通过简单的接口让你轻松实现实时数据流,特别适合需要频繁更新的应用。

标签:console,连接,eventSource,EventSource,event,服务器之间,客户端
From: https://www.cnblogs.com/Simoon/p/18386883

相关文章

  • 虚幻5数字人,UE5如何使用VaRest插件用POST请求连接OpenAI的ChatGPT,保姆级教程
    首先整理下,需要用到的插件或者密钥:1.VaRest插件,Epic商城直接安装(免费)2.OpenAI的密钥,要去OpenAI的官网获取1.安装VaRest插件(免费)打开EPIC商城,在虚幻商城中搜索VaRest点击免费后获取,然后点击安装到引擎 选择对应的UE版本,我这里就选择5.32.新建UE5.3的项目在库中找到U......
  • 达梦数据库在Delphi10.3上的安装与连接
          ......
  • Kettle: pentaho-server-ce-9.4 连接失败:ConnectionServiceImpl.ERROR_0009
    pentaho-server-ce-9.4 数据库连接MYSQL8.0.37 ,测试连接失败,提示:ConnectionServiceImpl.ERROR_0009-Connectiontodatabase[MYSQL8]failed. 在TOMCAT\LOGS\catalina.2024-08-27.log日志内容如下:  20:58:27,287ERROR[ConnectionServiceImpl]Errorend:21:0......
  • JdbcTemplate教程:JdbcTemplate连接MySQL数据库从入门到进阶
    一、入门了解JDBC概念:JDBC(JavaDataBaseConnectivity):Java数据库连接技术:具体讲就是通过Java连接数据库,并且可以通过发送SQL指令,实现对表中数据执行增、删、改、查等操作的技术。原生JDBC编程(了解一下):        查询t_user表(包括字段:user_id,username,password)中的......
  • Android开发 - BluetoothDevice 类蓝牙连接、通信以及获取设备信息解析
    BluetoothDevice是什么BluetoothDevice是用于表示远程蓝牙设备的类。它提供了与设备进行连接、通信以及获取设备信息的功能。在蓝牙通信中,BluetoothDevice对象代表一个实际的物理设备,比如蓝牙耳机、智能手表、蓝牙音箱等BluetoothDevice的主要作用获取蓝牙设备的信息通......
  • 一文搞懂长连接、长轮训、短连接、短轮询区别
    在网络通信中,长连接、长轮询、短连接和短轮询是四种常见的通信方式,它们各自具有不同的特点和适用场景。以下是对这四种方式的详细解释:一、长连接(LongConnection)定义:长连接是指在建立连接后,客户端和服务器之间可以保持一段时间的通信状态,而不是在每次数据传输后都断开连接。这......
  • 此站点的连接不安全,解决方法
    在浏览网页时,有时我们会遇到一个令人不安的提示:“此站点的连接不安全”。这种情况可能会让我们感到困惑和担忧,因为它可能意味着我们的个人信息和浏览数据面临风险。但别担心,本文将为您提供一套详尽的解决方案,让您安全、自信地畅游网络世界。   一、了解“连接不安全”的......
  • 主机windows系统,虚拟机安装ubuntu无线网络连接配置
    主机系统:windows系统虚拟机版本:VMware10.0.1build-1379776ubuntu系统版本:ubuntu16.04LTSlinux系统配置:按照顺序点击下图中的1位置,会出现一个下拉列表然后点击下拉列表中2的位置,编辑连接然后出现下图中所示界面选中3所示位置,然后点击4“编辑”依次配置如下箭头所......
  • java连接sqlite数据库
    首先下载jar包(每种数据库有自己jar包)然后idea里创建新项目并且在项目里创建lib文件里面放jar包接着导入jar包然后apply->ok这样就连上如果要可视化数据库DBBrowser最后测试连接TestConnection看数据库连上没结果:......
  • 数据库连接池的基本原理
    数据库连接池数据库池化技术,也常被称为连接池技术,是一种在数据库应用中广泛使用的技术,旨在减少数据库连接的开销,提高系统的性能和资源利用率。其核心思想是预先创建一定数量的数据库连接并将这些连接集中管理,形成一个连接池。当应用程序需要进行数据库操作时,它可以直接从连......