zoukankan      html  css  js  c++  java
  • vuesocket.io在单文件中使用(进入到单文件再发请求)

    文件中单独使用vuesocket.io

    最近的vue项目中需要使用到长链接,了解了一番后决定用vue-socket.io来操作,但是网上的教程大多是直接在main.js中直接发起长链接,而我的项目是需要在指定的页面开启,并不是直接查看。下面是我的解决方案(参考的是github上该项目issue中的解决方案)

    基础步骤是一样的

    先在main.js中对项目进行引入

    注意options中的autoConnec需要设置为false,因为我们不想要一进入页面就完成连接

    至于其他的options可参见https://socket.io/docs/v3/client-api/index.html

    import VueSocketio from 'vue-socket.io'
    Vue.use(
      new VueSocketio({
        debug: true,
        connection: 'http://*****/test', //这里的test是namespace具体看后端配置
        options:{
          autoConnect: false  
        },
      })
    )
    

    然后在单文件开启连接,此时需要使用this.$socket.open()

    此处不能使用this.$socket('connect')或者this.$socket.on('connect') ,这是在开启连接之后才生效的方法,之前一直在用这个方法尝试,不会报错但是不能成功

    接下来是监听每个事件,事件的名称与后端有关,这个需要询问后端给的函数名是哪个

    mounted(){
        this.$socket.open()
    },
     sockets: {
        connect: function () {
           console.log('socket 连接成功')
        },
        disconnect: function () {
           alert('断开连接')
        },
        reconnect: function () {
          console.log('重新连接')
          this.$socket.emit('conect')
        },
        async my_response (res) {
          console.log('接收数据', res)
        }
     },
     beforeDestroy(){
        this.$socket.close()
      }
    
    

    思考

    在写以上方法之前是直接在单文件中完成引入并试图在created中直接创建实例,这个方法在main.js中是可行的,一进入项目就能直接发起请求,但是在单文件中请求失败

     //直接在目标文件page.vue中进行操作
     import Vue from 'vue';
     import VueSocketio from 'vue-socket.io'
     export default {
         Vue.use(
          new VueSocketio({
             debug: true,
             connection: 'http://132.121.169.8:8020/test'
           })
         )
      }
    

    当使用该方法时打开chrome的控制台会发现:其实请求是有发出的,但是我们监测不到数据的返回,

    询问过大佬之后初步判定是组件的渲染问题,

    相关源码如下: https://github.com/MetinSeylan/Vue-Socket.io/blob/master/src/mixin.js

    我们没有确保页面是加载在VueSocketIO实例创建之后。

    可是事实上可以在页面中打印出 this.$socket,所以其中的关系暂时不是很清楚,有明白的大佬欢迎留言下!十分感谢

    另:项目中存在连接为异步获取的可参考这篇博客

  • 相关阅读:
    iOS- static extern const
    App 性能分析
    迭代器和生成器
    软件工程之个人软件开发----起步
    myeclipse调式与属性显示
    hdu 6188
    uva10780 质因子分解
    云服务器端口号的几个操作
    Redis错误 : MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk.
    ubuntu系统安装宝塔面板Linux版
  • 原文地址:https://www.cnblogs.com/axu1997/p/14116625.html
Copyright © 2011-2022 走看看