uni-app 使用 sse 协议

读者来稿 · song-shao与 batype 的 AI 分身对话整理

·531 字 · 约 1 分钟#Vue 3#HTML

uni-app 中使用 Server-Sent Events (SSE) 协议来接收服务器推送的数据,你可以使用原生的 EventSource 对象。EventSource 是一个内置的浏览器对象,可以用来处理 SSE 连接。以下是如何在 uni-app 中实现 SSE 的步骤:

步骤 1: 创建 SSE 服务#

首先,你需要在后端设置一个 SSE 服务。如果你已经有了一个 SSE 服务,可以直接跳到下一步。否则,可以参考前面提供的 NestJS 示例来创建一个 SSE 服务。

步骤 2: 在 uni-app 中订阅 SSE 服务#

uni-app 中,你可以使用 EventSource 对象来订阅 SSE 服务。以下是一个简单的示例,展示如何在 uni-app 中订阅 SSE 服务并处理接收到的数据。

在 Vue 组件中使用 SSE#

  1. 创建 Vue 组件

    假设你有一个名为 Auction.vue 的组件,你可以在 mounted 生命周期钩子中订阅 SSE 服务。

    <template>
      <view>
        <text>最新出价: {{ latestBid }}</text>
      </view>
    </template>
    
    <script>
    export default {
      data() {
        return {
          latestBid: null,
        };
      },
      mounted() {
        this.subscribeToSSE();
      },
      beforeDestroy() {
        this.unsubscribeFromSSE();
      },
      methods: {
        subscribeToSSE() {
          const auctionId = 123; // 替换为实际的 auctionId
          const eventSource = new EventSource(`${this.$config.baseUrl}/auction/${auctionId}/subscribe`);
    
          eventSource.onmessage = (event) => {
            const data = JSON.parse(event.data);
            this.latestBid = data;
            console.log('New bid:', data);
          };
    
          eventSource.onerror = (error) => {
            console.error('SSE error:', error);
            eventSource.close();
          };
    
          // 保存 eventSource 实例以便后续关闭
          this.eventSource = eventSource;
        },
        unsubscribeFromSSE() {
          if (this.eventSource) {
            this.eventSource.close();
          }
        },
      },
    };
    </script>
    
    <style scoped>
    /* 你的样式 */
    </style>
    
  2. 配置基础 URL

    uni-app 项目中,你可能需要配置一个基础 URL (baseUrl),以便在多个地方重用。你可以在 main.jsmain.ts 中设置这个配置。

    import Vue from 'vue';
    import App from './App';
    
    Vue.config.productionTip = false;
    
    // 配置基础 URL
    Vue.prototype.$config = {
      baseUrl: 'http://your-backend-url.com', // 替换为你的后端服务地址
    };
    
    App.mpType = 'app';
    
    const app = new Vue({
      ...App
    });
    
    app.$mount();
    

步骤 3: 测试 SSE 功能#

  1. 启动后端服务

    确保你的后端 SSE 服务已经启动并且可以正常工作。

  2. 运行 uni-app 项目

    uni-app 项目中运行你的项目,确保可以成功订阅 SSE 服务并接收到推送的数据。

  3. 观察日志

    打开开发者工具,查看控制台日志,确保 onmessage 回调函数被正确调用,并且数据被正确解析和显示。

注意事项#

  • 跨域问题:如果你的前端和后端不在同一个域名下,确保后端服务允许跨域请求。
  • 错误处理:在 onerror 回调中处理 SSE 连接错误,并在适当的时候重新连接。
  • 性能考虑:SSE 连接会长时间保持打开状态,确保服务器和客户端都能处理这种情况。

通过以上步骤,你可以在 uni-app 项目中实现 SSE 功能,接收来自后端的实时数据推送。

相关文章

  • DIV 波纹效果

    要实现一个动态波纹效果,通常可以使用 CSS 和 JavaScript。以下是一个简单的示例,展示了如何在点击一个 div 元素时产生波纹效果。

  • input 框输入时切换输入法避免误输入

    探索如何避免在输入时切换输入法导致的误输入问题。本文介绍了HTML结构和JavaScript逻辑,通过监听输入法事件,实现在用户完成输入后触发搜索功能,提升用户体验。

  • uni-app i18n 国际化

    uni-app项目实现国际化i18n,引入vue-i18n库,创建语言文件,配置i18n实例,组件中使用$t方法,动态切换语言。