You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Vue-Socket.io/README.zh-CN.md

4.3 KiB

安装

npm install vue-socket.io --save

main.js 代码

import Vue from 'vue'
import store from './store'
import App from './App.vue'
import VueSocketIO from 'vue-socket.io'

const options = { path: '/my-app/' }; //Options object to pass into SocketIO

Vue.use(new VueSocketIO({
    debug: true,
    connection: 'http://metinseylan.com:1992',
    options: {
        path: options.path
    }
  })
);

new Vue({
    router,
    store,
    render: h => h(App)
}).$mount('#app')

局部使用

组件的话就在基础属性里加上sockets 对象, 里面写上自己要监听的事件名

new Vue({
    sockets: {
        connect: function () {
            console.log('socket connected')
        },
        customEmit: function (data) {
            console.log('this method was fired by the socket server. eg: io.emit("customEmit", data)')
        }
    },
    methods: {
        clickButton: function (data) {
            // $socket is socket.io-client instance
            this.$socket.emit('emit_method', data)
        }
    }
})

动态使用

如果你需要在运行时动态消费事件你可以在Vue组件中使用' subscribe '和' unsubscribe '方法


mounted() {
    this.sockets.subscribe('EVENT_NAME', (data) => {
        this.msg = data.message;
    });
},
beforeDestroy() {
    this.sockets.unsubscribe('EVENT_NAME');
}

vuex 模式

当你在安装中设置存储参数时,' Vue-Socket。io '将开始发送事件到Vuex商店。如果你为vuex设置了两个前缀 你可以同时使用' actions '和' mutations '。但是,最好的使用方法就是" actions " main.js 代码

import Vue from 'vue'
import store from './store'
import App from './App.vue'
import VueSocketIO from 'vue-socket.io'

const options = { path: '/my-app/' }; //Options object to pass into SocketIO

Vue.use(new VueSocketIO({
    debug: true,
    connection: 'http://metinseylan.com:1992', 
    vuex: {
      store,
      actionPrefix: "socket_", // 默认值是大写的 SOCKET_
      mutationPrefix: ""
    },
    options: {
        path: options.path
    }
  })
);

new Vue({
    router,
    store,
    render: h => h(App)
}).$mount('#app')

store 代码

import Vue from 'vue'
import Vuex from 'vuex'
import { SOCKET_ERROE } from "./types"

Vue.use(Vuex)

export default new Vuex.Store({
    state: {},
    mutations: {
        // 不建议在这里触发事件
        [SOCKET_ERROE]() {
            // do something
        }
    },
    actions: {
        socket_connect() {
            // do something
        }
    }
})

原始事件

event 事件 注意: socket_ 是vuex模式下的一个前缀 插件内部默认值是大写需要保持vuex里的事件命名风格请自己传一个前缀名

socket_connect

参数: 无 在连接到命名空间时触发(包括成功的重新连接)

socket_error

参数: error (Object)错误对象 在发生连接错误时触发

socket_disconnect

参数: reason (String) 错误提示 断开连接时触发

socket_reconnect

参数:attempt (Number) 重新连接尝试次数 重新连接成功后触发

socket_reconnect_attempt

参数: attempt (Number) 重新连接尝试次数

socket_reconnecting

参数: attempt (Number) 尝试链接次数 尝试重新连接时触发

socket_reconnect_error

参数: error (Object) 错误对象 重新连接尝试错误时触发

socket_reconnect_failed

参数:无 无法在内部重新连接时触发reconnectionAttempts

socket_connect_error

参数:connect_error (Object) 错误对象 当发生名称空间中间件错误时触发

socket_connect_timeout

参数: timeout (String) 时间 在连接超时时触发

socket_connecting

参数:

socket_ping

参数: 无 当从服务器接收到ping数据包时触发

socket_pong

参数: ms (Number) 自ping数据包以来经过的毫秒数 即等待时间 当从服务器接收到一个Pong时触发

注意: 此插件基于socket.io-client封装在使用的时候一定要注意前后端的socket.io-client版本 如果自行升级了socket.io-client版本请注意查阅一下官方文档3.x以上的版本有个别事件已删除