专栏名称: 前端大全
分享 Web 前端相关的技术文章、工具资源、精选课程、热点资讯
目录
相关文章推荐
前端早读课  ·  【第3452期】React 开发中使用开闭原则 ·  4 小时前  
启四说  ·  启四VIP策略网站,有哪些功能?如何使用? ·  15 小时前  
启四说  ·  启四VIP策略网站,有哪些功能?如何使用? ·  15 小时前  
前端早读课  ·  【第3451期】前端 TypeError ... ·  昨天  
江苏司法行政在线  ·  宿迁司法行政人、江苏监狱戒毒民警,给您拜年啦! ·  3 天前  
江苏司法行政在线  ·  宿迁司法行政人、江苏监狱戒毒民警,给您拜年啦! ·  3 天前  
51好读  ›  专栏  ›  前端大全

不止WebSocket可以实现长连接,它也可以

前端大全  · 公众号  · 前端  · 2024-10-18 11:50

正文

作者_onlooker

https://juejin.cn/post/7411032557075103759

前言

首先听到服务端消息推送一般大多数可能都是使用到的 websocket ,但是 websocket 一般主要是用于聊天室,而 SSE(Server-Sent Events) 也是可以基于服务器来与Web页面来进行数据和消息的推送的,但是与 websocket 不同的是,服务器发送事件是单项的,数据只能从服务端发送到客户端。例如我们可以看一下常用的 chatGtp 他的文本输出就是基于服务器的消息推送进行输出的。下面我们见看如何来建立一个通讯连接

EventSource

EventSource 是一个实例,专门用来建立与服务器的连接接收服务器的消息推送的,他会与服务器建立一个 HTTP 的长连接,他会一致保持开启,直到调用 close 关闭连接。ps:他是无法使用 axios 的因为 axios 内部其实使用的是XMLHttpRequest,他是无法支持接收服务端推送的消息的。

我们先实现一个简单的后台服务,然后前台来使用这个实例看一下效果是怎么样的。

const article = `警告:当不使用 HTTP/2 时.....。`
app.get('/chat_typing', (req, res) => {
  // 开启 Server-sent events
  res.setHeader('Content-Type''text/event-stream')
  let index = 0
  let timerId = 0
  // 模拟每隔 0.1s 向前端推送一次
  timerId = setInterval(() => {
    // 获取文字
    const data = article[index]
    // 下标累加
    index++
    // 响应结果
    if (data) {
      // data:表示数据内容,\n\n 表示结尾。
      res.write(`data: ${data}\n\n`)
    } else {
      res.end()
      clearInterval(timerId)
    }
  }, 100)
})

这里我们简单实现了一个node服务,主要的就是 Content-Type 这里我们把他设置为了 text/event-stream ,也就是服务端的消息推送,然后我们每100毫秒推送一个字符过去,然后我们再前台看一下接收的效果是什么样子的







请到「今天看啥」查看全文


推荐文章
前端早读课  ·  【第3452期】React 开发中使用开闭原则
4 小时前
燕儿的镜头背后  ·  摄影快线 | 相机简介
7 年前
银河系会玩  ·  男孩想你。
7 年前
同道大叔  ·  7月22日十二星座运势分析
7 年前