传送门:Vue中 使用 WebSocket
1. 安装及引入
vue-socket.io 其实是在 socket.io-client(在浏览器和服务器之间实现实时、双向和基于事件的通信) 基础上做了一层封装,将 $socket 挂载到 vue 实例上,同时可使用 sockets 对象轻松实现组件化的事件监听,在 vue 项目中使用起来更方便。
安装: vue-socket.io npm地址
npm i vue-socket.io
引入:
import Vue from 'vue'
import store from './store'
import App from './App.vue'
import VueSocketIO from 'vue-socket.io'
Vue.use(
new VueSocketIO({
debug: true,
connection:'http://metinseylan.com:1992',
options:{
autoConnect: false,
path: "/my-app/",
transports: ['polling'],
extraHeaders:{},
},
vuex: {
store,
actionPrefix: 'SOCKET_',
mutationPrefix: 'SOCKET_',
},
})
)
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
参数 | 类型 | 默认值 | 是否必选 | 描述 |
---|
debug | Boolean | false | 可选择 | 为调试启用日志记录 | connection | String / Socket.io-client | null | 必要 | Websocket 服务器 url 或 socket.io-client 实例 | vuex.store | Vuex | null | 可选择 | Vuex store 实例 | vuex.actionPrefix | String | null | 可选择 | 发出服务器端 vuex 操作的前缀 | vuex.mutationPrefix | String | null | 可选择 | 发出服务器端 vuex 突变的前缀 |
更多参数配置可参考: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(){
this.$socket.open();
this.sockets.subscribe('testCall', (res) => {
if(res.code == 200 && res.randomId === this.randomId){
console.log('召唤成功')
}
})
},
socketSendmsg(){
this.randomId = Math.random();
this.$socket.emit('testCall', {
"randomId": this.randomId,
"deviceId": "123456"
});
},
},
sockets: {
connect: function () {
console.log('连接成功')
},
disconnect: function () {
console.log('断开连接')
},
reconnect: function () {
console.log('重新连接')
},
},
beforeDestroy(){
this.sockets.unsubscribe('testCall');
this.$socket.close();
},
}
</script>
参考文章:vue-socket.io 使用教程与踩坑记录
|