Vue实时通讯插件(vue-socket.io)

本文介绍了如何在Vue项目中使用vue-socket.io插件实现实时通讯。首先通过npm安装插件,然后在main.js中引入并配置连接地址,动态地址时需等待接口返回。接着在组件的mounted生命周期中执行connect,同时提供了多种后台事件的监听处理。最后展示了在调试模式下如何观察socket连接状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vue实时通讯插件(vue-socket.io)


一、下载vue-socket.io

npm install vue-socket.io --sava

二、引入到Vue-cli项目中

引入的方式有两种情形,具体根据项目需求来做

  • 第一种情景:webSocket连接的地址是固定的
    在main.js中直接这样写
import VueSocketIO from 'vue-socket.io'

Vue.use(new VueSocketIO({

    debug: true,

    connection: 'http://metinseylan.com:1992',  // 连接后端地址

}))
  • 第二种情形:webSocket连接地址是动态的,是通过后台接口传给我们的
import {getCode} from '@/api/api.js';
import VueSocketIO from 'vue-socket.io'; //引入插件
impirt Vue from 'vue';
getCode().then(res->{
Vue.use(new VueSocketIO({
    debug:true,
    connection:res.url
   }))
})

import App from './App'
import router from './router'
三、在mounted中执行connect
  • 当socket地址是静态的写法
mounted(){
this.$socket.emit('connect',1)
}
  • 当socket地址是动态的
    因为此时的socket连接地址是动态的,就会存在请求响应然后渲染的时间,这个时候就会出现socket还没渲染成功就执行App.veu,这时候connect连接事件就不会触发,所以采用定时器的方法来执行connect
mounted() {
    var timerOne = window.setInterval(() => {
      if (this.$socket) {
        this.$socket.emit('connect', 1)
        window.clearInterval(timerOne)
        return;
      }
    }, 500)
  },
四、推送消息给后台,连接socket
sockets:{
connect(data){
if(data){
    console.log("连接connect",data)
    getSocketServiceList().then(res=>{
      if(res.code){
        this.$socket.emit("authentication",{authCode:res.code}) //推送消息给后台,实现socket登录,这里推送的名称authentication是后台定义的
        }
      })
    },
    //监听连接数量 socket心跳,检测socket连接情况,这个是可有可无的,主要是直观
    users(data){ 
    console.log("在线人数",data)
    },
    //后台推送数据
    recceive_message(data){ 
      conosle.log("接受数据",data)
     },
     //断开连接,在这里会自动多次执行connect连接,直到连接成功
     reconnect(data){
     console.log("重新连接",data)
     this.$socket.emit("connect",1)
     },
     //检测断开,并重新连接
     disconnect(){
     console.log("socket已断开连接")
     console.log("是否连接重新连接",this.$socket.connected)
     this.$socket.emit("reconnect",this)
     },
     //接受后台传过来的消息进行相应的处理
     transferMessage(data){
     
     }
   }
 }
五、连接成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yDoUSJ9w-1602831293021)(./1602830922217.png)]
因为我们在 new VueSocketIO中开启debug:true就会在控制台中出现那些蓝色字体,来帮助我们调试socket,注意,如果蓝色的字中,没有包含我们就在socket中定义的事件connect、users、reconnect...那就可能是我们在main.js中创建的new VueSocketIO渲染时间有问题,这时候connect事件也不会执行

后台定义的事件

如图上所示user、transferMessage这些名词,都是后台自定义的,每个项目中可能都会有所不同,我们接受消息的事件就是靠后台来告诉我们的

vue-socket.io中自带的几个事件

connect:查看socket是否渲染成功
disconnect:检测socket断开连接
reconnect:重新连接socket事件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值