node.js - 在 Vue 项目中处理多个套接字
问题描述
现在我有一个使用 Vue-native-socket 与单个套接字交互的 Vue 前端。我需要我的应用程序监听多个套接字,尽管在 Vue-native-socket 的文档页面上没有关于如何实现它的信息。
有没有办法做到这一点?不一定用这个库,我不介意用另一个库重写代码,只要它有效。
解决方案
这可以像连接两个套接字并设置它们各自的侦听器一样简单。快速浏览一下,大部分vue-native-socket
完成的事情(在问题的上下文中)也可以使用vuex
商店来实现,或者编写自己的插件,或者两者兼而有之!
这是一个简单的解决方案:
store.js
const state = {
signalSocket: undefined,
dataSocket: undefined
}
const getters = {
signalSocket: state => state.signalSocket,
dataSocket: state => state.dataSocket,
}
const mutations = {
signalSocket (state, v) {
state.signalSocket = v
},
dataSocket (state, v) {
state.dataSocket = v
}
}
export default new Vuex.Store({
state,
getters,
mutations
})
应用程序.vue
<template>
...
</template>
<script>
export default {
computed: {
signalSocket: {
get () { return this.$store.getters.signalSocket },
set (v) { this.$store.commit('signalSocket', v) }
},
dataSocket: {
get () { return this.$store.getters.dataSocket },
set (v) { this.$store.commit('dataSocket', v) }
}
},
mounted () {
this.signalSocket = new WebSocket('...')
this.dataSocket = new WebSocket('...')
...
}
}
</script>
如果您希望此变量随处可用,就像 一样vue-socket-native
,您可以将以下内容添加到您的main.js
main.js
import Vue from 'vue'
import Store from './store'
Vue.use({
install (Vue, options) {
Object.defineProperty(Vue.prototype, '$signalSocket', {
get () {
return store.getters.signalSocket
},
set (v) {
return store.commit('signalSocket', v)
}
})
Object.defineProperty(Vue.prototype, '$dataSocket', {
get () {
return store.getters.dataSocket
},
set (v) {
return store.commit('dataSocket', v)
}
})
}
})
推荐阅读
- python - 我应该在此代码中添加什么以使 Discord 嵌入具有描述?
- flutter - 在颤动中将多个 ListView 滚动合并为一个
- python - 快速排序数组python
- macos - macOS 终端和 VS Code 给出的不同结果?
- curl - Next-Auth:getSession 返回 null
- pandas-profiling - 如何仅打印来自 pandas_profiling 的警告?
- javascript - 如何有条件地将只读属性设置为一行表
- node.js - HTTP请求节点js中的异步任务
- laravel - 使用 Vue 3 在 InertiaJS 中定义全局组件
- javascript - 使用钩子和承诺后如何从.json映射信息