vue2中使用SSE(服务器发送事件)原因分析

 更新时间:2023年10月17日 14:59:54   作者:如晴天似雨天~  
SSE是围绕只读Comet交互推出的API或者模式,SSE 支持短轮询、长轮询和HTTP 流,而且能在断开连接时自动确定何时重新连接,本文重点给大家介绍

SSE简介

SSE(Server-Sent Events,服务器发送事件)是围绕只读Comet 交互推出的API 或者模式。

SSE API允许网页获得来自服务器的更新,用于创建到服务器的单向连接,服务器通过这个连接可以发送任意数量的数据。服务器响应的MIME类型必须是text/event-stream,而且是浏览器中的JavaScript API 能解析格式输出。

SSE 支持短轮询、长轮询和HTTP 流,而且能在断开连接时自动确定何时重新连接。

使用原因

之前系统通知公告等信息是通过每隔一段时间调用接口来判断是否有新的公告或通知,最开始想到的是用websocket,但是这场景只需要服务端往客户端发送消息,所以商量后决定使用SSE。

// 使用这个库可以添加的请求头(比如添加token)
import { EventSourcePolyfill } from "event-source-polyfill";
import { getToken } from '@/utils/user'
export default {
  data() {
    return {
      eventSource: null
    }
  },
  mounted() {
    this.createSSE()
  },
  methods: {
    createSSE(){
      if(window.EventSource){
        // 根据环境的不同,变更url
        const url = process.env.VUE_APP_MSG_SERVER_URL
        // 用户userId
        const { userId } = this.$store.state.user
        this.eventSource = new EventSourcePolyfill(
          `${url}/sse/connect/${userId}`, {
          // 设置重连时间
          heartbeatTimeout: 60 * 60 * 1000,
          // 添加token
          headers: {
             'Authorization': `Bearer ${getToken()}`,
          },
        });
        this.eventSource.onopen = (e) => {
          console.log("已建立SSE连接~")
        }
        this.eventSource.onmessage = (e) => {
          console.log("已接受到消息:", e.data)
        }
        this.eventSource.onerror = (e) => {
          if (e.readyState == EventSource.CLOSED) {
            console.log("SSE连接关闭");
          } else if (this.eventSource.readyState == EventSource.CONNECTING) {
            console.log("SSE正在重连");
            //重新设置token
            this.eventSource.headers = {
              'Authorization': `Bearer ${getToken()}`
            };
          } else {
            console.log('error', e);
          }
        };
      } else {
        console.log("你的浏览器不支持SSE~")
      }
    },
    beforeDestroy() {
      if(this.eventSource){
          const { userId } = this.$store.state.user
          // 关闭SSE
          this.eventSource.close();
          // 通知后端关闭连接
          this.$API.system.msg.closeSse(userId)
          this.eventSource = null
          console.log("退出登录或关闭浏览器,关闭SSE连接~")
       }
    },

在createSSE被调用后,这个请求会一直在pending状态

直到服务端向客户端发送消息,状态才会改变

最后离开时记得关闭连接

到此这篇关于在vue2中使用SSE(服务器发送事件)的文章就介绍到这了,更多相关vue2使用SSE内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue 2.0封装model组件的方法

    vue 2.0封装model组件的方法

    本篇文章主要介绍了vue 2.0封装model组件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 几个你不知道的技巧助你写出更优雅的vue.js代码

    几个你不知道的技巧助你写出更优雅的vue.js代码

    本文参考自油管上某个国外大神的公开演讲视频,学习了一下觉得很不错,所以在项目中也使用了这些不错的技巧。趁周末有空,写个博客记录一下
    2018-06-06
  • 解决Vue.js Devtools未检测到Vue实例的问题

    解决Vue.js Devtools未检测到Vue实例的问题

    在开发Vue.js应用时,Vue.js Devtools是一个不可或缺的调试工具,然而,有时我们可能会遇到“Vue.js not detected”的提示,这意味着Vue.js Devtools未能成功识别和连接到我们的Vue应用,本文将详细解析这个问题,并提供相应的解决步骤与代码示例,需要的朋友可以参考下
    2024-01-01
  • Vs-code/WebStorm中构建Vue项目的实现步骤

    Vs-code/WebStorm中构建Vue项目的实现步骤

    本文主要介绍了在Vs-code/WebStorm中构建Vue项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • vue-cli脚手架的.babelrc文件用法说明

    vue-cli脚手架的.babelrc文件用法说明

    这篇文章主要介绍了vue-cli脚手架的.babelrc文件用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Vue 3 响应式系统中ref 在 reactive 中的自动解包行为解析

    Vue 3 响应式系统中ref 在 reactive 中的自动解包行为

    Vue3中,ref与reactive配合使用时会自动解包,使代码更简洁,响应式系统更智能,替换ref会断开旧连接,浅层reactive/shallowRef不触发解包,但是需注意区分,下面通过示例给大家介绍Vue3响应式探秘:ref 在reactive中的自动解包行为解析,感兴趣的朋友一起看看吧
    2025-07-07
  • Vue3数据更新,页面没有同步更新的问题及解决

    Vue3数据更新,页面没有同步更新的问题及解决

    这篇文章主要介绍了Vue3数据更新,页面没有同步更新的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Vue3性能优化的5个隐藏技巧总结大全(第4个连老手都未必知道)

    Vue3性能优化的5个隐藏技巧总结大全(第4个连老手都未必知道)

    Vue.js的性能优化涉及多个方面,包括编码优化、源码优化、打包优化以及使用工具进行性能分析等,这篇文章主要介绍了Vue3性能优化的5个隐藏技巧的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-05-05
  • vue2.0开发入门笔记之.vue文件的生成和使用

    vue2.0开发入门笔记之.vue文件的生成和使用

    本篇文章主要介绍了vue2.0开发入门笔记之.vue文件的生成和使用 ,非常具有实用价值,需要的朋友可以参考下
    2017-09-09
  • vue3中7种路由守卫的使用大全举例

    vue3中7种路由守卫的使用大全举例

    最近在学习vue,感觉路由守卫这个地方知识点挺多的,而且很重要,下面这篇文章主要给大家介绍了关于vue3中7种路由守卫的使用大全,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03

最新评论