vue-socket.io的使用

ts + vue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import store from '@/store'
import { Module, VuexModule, Mutation, Action, getModule } from 'vuex-module-decorators'
import App from '@/main'
import { UserModule } from '@/store/modules/user'

@Module({ dynamic: true, store, name: 'WebSocket' })
class WebSocket extends VuexModule {
connect_status: Boolean = false // 连接状态
message: any // 全局消息
env = process.env.NODE_ENV === 'development'

@Mutation
private SOCKET_CONNECT() {
this.connect_status = true
if (this.env) console.log('socket连接成功==========>', this.connect_status)
}
@Mutation
private SOCKET_CONNECT_ERROR() {
this.connect_status = false
if (this.env) console.log('socket连接失败==========>', this.connect_status)
}
@Mutation
private SOCKET_DISCONNECT() {
this.connect_status = true
if (this.env) console.log('socket连接断开==========>', this.connect_status)
}

@Mutation
private SOCKET_NOTIFICATION(message: any) {
this.message = message
}

@Mutation
private SOCKET_JOINACCOUNTROOM(data: any) {
App.$socket.emit('joinAccountRoom', {
accountId: data.accountId,
userId: data.userId,
})
}

@Action
socket_connect() {
this.context.commit('SOCKET_CONNECT')
}
@Action
socket_disconnet() {
this.context.commit('SOCKET_DISCONNECT')
}
@Action
socket_reconnect() {
console.log('重连成功')

// 服务器重启 重新加入私有房间
const accountId = UserModule.accountId
const userId = UserModule.userId
console.log(accountId, userId)
if (accountId && userId)
this.context.commit('SOCKET_JOINACCOUNTROOM', {
accountId,
userId,
})
}
@Action
socket_connect_error() {
this.context.commit('SOCKET_CONNECT_ERROR')
}

@Action // notification 与后端 通知的方法名称一致
socket_notification(message: any) {
this.context.commit('SOCKET_NOTIFICATION', message)
}
@Action // 加入私有房间
socket_joinAccountRoom(data: any) {
if (this.connect_status) this.context.commit('SOCKET_JOINACCOUNTROOM', data)
}
}

export const WebSocketModule = getModule(WebSocket)

在 main.js

1
2
3
4
5
6
7
8
9
10
11
Vue.use(
new VueSocketIO({
debug: process.env.NODE_ENV === "development",
connection: process.env.VUE_APP_SOCKET_UEL || "",
vuex: {
store,
actionPrefix: "socket_",
mutationPrefix: "SOCKET_",
},
})
);

在 app.vue 导入 就可以用了

1
import "@/store/modules/websocket";
文章目录