koa-websocket 长连接推送数据

一. 介绍

使用 koa-websocket 实现该功能,只做了一个接口的推送,仅用做测试。长连接使用的 setInterval 实现,后台每隔 3s 向前台推送数据,个人感觉这里不好,后期优化。

二. 实现

后台(服务端)

npm i koa-websocket
// utils/ws
const router = require('koa-router')()
const Zdwxy = require('../models/zdwxySchema.js')
const Koa = require('koa')
const websocket = require('koa-websocket')
const app = websocket(new Koa())

// 监听koa/ws路由,是否有连接
router.all('/koa/ws', (ctx) => {
    setInterval(async () => {
        try {
            const list = await Zdwxy.find()
            ctx.websocket.send(JSON.stringify(list));
        } catch (error) {
            ctx.websocket.send(error.stack);
        }
    }, 3000);
})

// 使用路由
app.ws.use(router.routes()).use(router.allowedMethods())

//端口号后面可采用动态的
app.listen(3001, () =>
    console.log('ws服务启动成功')
)

module.exports = app
// app.js
require('./utils/ws')

前台(前端)

如果上线的话,ws 的地址不用改成服务器地址,127.0.0.1 就好使

<script>
import { onMounted, ref } from "vue";
export default {
  setup(props) {
    let leftFirstData = ref([]);
    
    // 创建一个websocket
    var webSocket = new WebSocket("ws://127.0.0.1:3001/koa/ws");
    webSocket.onmessage = function(evt) {
      // 这是服务端返回的数据
      let data = JSON.parse(evt.data);
      leftFirstData.value = data;
      console.log("data", data);
      console.log("evt", evt);
    };

    return {
      leftFirstData
    };
  }
};
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值