当前位置: 首页 > article >正文

JS 实现SSE通讯和了解SSE通讯

SSE

介绍:
Server-Sent Events(SSE)是一种用于实现服务器向客户端实时推送数据的Web技术。与传统的轮询和长轮询相比,SSE提供了更高效和实时的数据推送机制。

SSE基于HTTP协议,允许服务器将数据以事件流(Event Stream)的形式发送给客户端。客户端通过建立持久的HTTP连接,并监听事件流,可以实时接收服务器推送的数据。


(核心代码)客户端请求:

通过message 接受数据并写入元素

const source = new EventSource("http://localhost:9001/sse")
source.onmessage = function(event) {
   console.log(event.data)
   document.getElementById("content").innerHTML += event.data
 }
 source.onerror = function(event) {
   console.log("EventSource failed:", event)
 }
 source.onopen = function(event) {
   console.log("EventSource connected.")
 }

 // 关闭sse连接
 // source.close()

http://localhost:9001为当前我本地启的服务器

服务器端:
这里我自己写了个简单的node接收请求,每500ms给客户端发送一次数据

const express = require('express')
const app = express()
const fs = require('fs')

//创建get请求
app.get('/sse', (req, res) => {
  res.setHeader('Content-Type', 'text/event-stream')
  res.setHeader('Connection', 'close')
  res.setHeader('Access-Control-Allow-Origin', '*')

  const data = fs.readFileSync('sse.txt', 'utf-8')
  const length = data.length
  console.log(length)
  let i = 0;
  var interval = setInterval(() => {
    console.log(i, length)
    if(i >= length) {
      console.log('end')
      clearInterval(interval);
      return;
    }
    res.write(`data:${data.split('')[i]}\n\n`)
    i++;
  }, 500);
})

//端口号9001
app.listen(9001)
console.log('server is running at http://localhost:9001')

sse.txt是为了测试写的要响应的内容

效果:

现在我们可以实现一个类似chatgpt的效果,服务器可以不断的给客户端发新数据

在这里插入图片描述


SSE 和 WebSocket 的差异

1、SSE 适用于服务器向客户端单向发送实时更新的数据,适合实时事件推送场景。SSE 使用的是标准的 HTTP 协议,对于浏览器的兼容性较好,但只支持客户端接收数据。
2、WebSocket 适用于客户端和服务器之间的双向实时通信,适合聊天应用、实时游戏等场景。WebSocket 需要独立的 TCP 连接,因此相比 SSE,会增加一定的网络开销,但能够实现双向通信。

简单来说就是WebSocket是全双工的,而SSE建立连接后只能由服务器向客户端发送实时数据


http://www.kler.cn/a/393276.html

相关文章:

  • 【VUE小型网站开发】socket.io聊天室
  • PetaLinux 内核输出信息的获取方式
  • YOLOv10目标检测-训练自己的数据
  • mac 关闭 sip
  • 极狐GitLab 17.7正式发布,可从 GitLab 丝滑迁移至极狐GitLab【一】
  • 《计算机组成及汇编语言原理》阅读笔记:p86-p115
  • AI大模型识别多人发音的实时语音交互理论研究
  • Logback 日志介绍及与Spring Boot 的整合 【保姆级教程】
  • 数据库基础(11) . SQL脚本
  • 在arm64架构下, Ubuntu 18.04.5 LTS 用命令安装和卸载qt4、qt5
  • golang将word、excel转换为pdf
  • JAVA:探索 EasyExcel 的技术指南
  • 哈希表的实现--C++
  • 【Redis】Redis的一些应用场景及使用策略
  • Android Studio使用c++编写
  • MATLAB和R及Python伪时间分析
  • 泷羽sec学习打卡-Linux基础2
  • Webpack 1.13.2 执行 shell 命令解决 打印时没有背景色和文字颜色的问题
  • 【云计算解决方案面试整理】3-7主流云计算平台、云计算架构、安全防护
  • ubuntu内核切换network unclaimed 网卡丢失
  • nginx配置负载均衡详解
  • 【聚类】Kmeans聚类方法概述及其MATLAB实现
  • 前端单元测试框架 引入说明
  • SpringBoot(四)配置拦截器、filter、跨域
  • Day41 | 动态规划 :完全背包应用 完全平方数单词拆分(类比爬楼梯)
  • 【Paper Note】跨音频-视觉匹配识别的3D CNN