欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > JS 实现SSE通讯和了解SSE通讯

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

2024/11/14 13:30:26 来源:https://blog.csdn.net/weixin_44646763/article/details/143677905  浏览:    关键词: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.lengthconsole.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建立连接后只能由服务器向客户端发送实时数据

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com