Vue中 引入使用 vue-socket.io

简介: Vue中 引入使用 vue-socket.io

传送门:Vue中 使用 WebSocket

1. 安装及引入

vue-socket.io 其实是在 socket.io-client(在浏览器和服务器之间实现实时、双向和基于事件的通信) 基础上做了一层封装,将 $socket 挂载到 vue 实例上,同时可使用 sockets 对象轻松实现组件化的事件监听,在 vue 项目中使用起来更方便。

安装:

vue-socket.io npm地址

npm i vue-socket.io

引入:

// main.js
import Vue from 'vue'
import store from './store'
import App from './App.vue'
import VueSocketIO from 'vue-socket.io'
Vue.use(
  new VueSocketIO({
    // 生产环境建议关闭,开发环境打开(在控制台看到socket连接和事件监听的信息)
    debug: true, 
    connection:'http://metinseylan.com:1992',
    options:{
      // 创建时是否自动连接 我们这里设定为false,在指定页面再开启
      autoConnect: false,
      // 路径(默认值:/socket.io/) 
      path: "/my-app/",
      // 目前有两种传输方式:HTTP long-polling(可简称:polling)、WebSocket
      transports: ['polling'],
      // 附加请求头(在服务器端的 socket.handshake.headers 对象中找到)
      extraHeaders:{},
    },
    // 如果没有使用到 store 可不写
    vuex: {
      store,
      actionPrefix: 'SOCKET_',// vuex action 前缀
      mutationPrefix: 'SOCKET_', // vuex mutation 前缀
    },
  })
)
new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

image.png

更多参数配置可参考:Socket.IO 官方文档

2. 组件内使用

<template>
  <div class="wrap">
    <button @click="socketEmit">连接Socket</button>
    <button @click="socketSendmsg">发送数据</button>
  </div>
</template>
<script>
export default {
  data(){
    return {
      randomId:null,
    }
  },
  methods:{
    socketEmit(){
      // 开始连接 socket
      this.$socket.open();
      // 订阅事件,testCall 是与后端约定好的名称
      this.sockets.subscribe('testCall', (res) => {
        if(res.code == 200 && res.randomId === this.randomId){
          console.log('召唤成功')
        }
      })
    },
    // 发送消息
    socketSendmsg(){
      this.randomId = Math.random();
      // testCall 是与后端约定好的名称
      this.$socket.emit('testCall', { 
        "randomId": this.randomId,
        "deviceId": "123456"
      });
    },
  },
  sockets: {
    connect: function () {
      console.log('连接成功')
    },
    disconnect: function () {
      console.log('断开连接')
    },
    reconnect: function () {
      console.log('重新连接')
    },
  },
  beforeDestroy(){
    // 关闭 Socket
    this.sockets.unsubscribe('testCall'); 
    this.$socket.close();
  },
}
</script>

参考文章:vue-socket.io 使用教程与踩坑记录

相关文章
|
22天前
|
JavaScript
Vue引入异步组件
Vue引入异步组件
|
22天前
|
缓存 JavaScript
VUE组件:请解释Vue的Keep-Alive是用来做什么的?
VUE组件:请解释Vue的Keep-Alive是用来做什么的?
21 0
|
JavaScript 定位技术 API
论vue引入百度离线地图
先附上链接,下面会用到:百度地图传送门
897 0
|
22天前
|
JavaScript
Vue3基础之v-bind与v-on
Vue3基础之v-bind与v-on
13 0
|
22天前
|
前端开发 JavaScript 开发者
React craco 详细使用与介绍(类似 Vue 外抛的 vue.config.js)
React craco 详细使用与介绍(类似 Vue 外抛的 vue.config.js)
308 0
|
22天前
|
JavaScript 开发者
Vue的报错机制
Vue的报错机制
16 0
|
22天前
|
JavaScript 前端开发 API
Vue 数据监听机制及 Vue 2.0 和 Vue 3.0 的比较
Vue 数据监听机制及 Vue 2.0 和 Vue 3.0 的比较
31 1
vue-cli引入vue-router
开启图形页面 在浏览器中创建项目 右上角 项目管理器,新建项目成功后切换为新项目 在左侧选择插件 列表中则会显示当前已经安装的插件 同时在导航栏上方会有几个按钮,可以添加新的插件,如果我们之前没有安装过router插件,则会显示该按钮,点击安装即可。
75 0
vue-cli引入vue-router
|
JavaScript 前端开发
你知道import Vue from 'vue' 吗?
随着前端模块化的兴起,特别在 vue、react等一些热门框架的崛起,越来越多的公司加入了这一阵营。提及前端的模块化(这里主要说的是Javascript语言的模块化),就不得不说 es6标准提出的 export 和 import 两个命令了。当然还有 commonJS里的 module.exports 和 require 这一对组合了,这里暂不介绍这两组命令的具体用法。以后 我会专门写一篇文章介绍这两个命令的用法。
你知道import Vue from 'vue' 吗?