美文网首页uni-app
uniapp全局使用websocket

uniapp全局使用websocket

作者: 幽小鬼 | 来源:发表于2021-04-08 16:55 被阅读0次

    我们通过vuex来实现全局状态管理,uniapp中内置了vuex,可以直接引入使用。
    在根目录下新建store文件夹,在底下建一个index.js,代码如下:

    import Vue from 'vue'
    import Vuex from 'vuex'
    Vue.use(Vuex)
    
    const store = new Vuex.Store({
        state: {
            socketTask: null
        },
        mutations: {
            WEBSOCKET_INIT (state, url) {
                state.socketTask = uni.connectSocket({
                    url,  // url是websocket连接ip
                    success () {
                        console.log('websocket连接成功')
                    }
                })
                state.socketTask.onOpen((res) => {
                    console.log('WebSocket连接正常打开中...!')
                    // 注:只有连接正常打开中 ,才能正常收到消息
                    state.socketTask.onMessage(res => {
                        console.log('收到服务器内容:' + res.data)
                    });
                })
            },
            WEBSOCKET_SEND (state, data) {
                state.socketTask.send({
                   data,
                   async success() {
                       console.log('消息发送成功')
                   },
               })
            },
            CLOSE_SOCKET (state) {
                if (!state.socketTask) return
                state.socketTask.close({
                    success (res) {
                        console.log('关闭成功', res)
                    },
                    fail (err) {
                        console.log('关闭失败', err)
                    }
                })
            }
        },
        actions: {
            WEBSOCKET_INIT({
                commit
                           }, url) {
                commit('WEBSOCKET_INIT', url)
            },
            WEBSOCKET_SEND({
                commit
                           }, data) {
                commit('WEBSOCKET_SEND', data)
            },
            CLOSE_SOCKET({
                commit
                         }) {
                commit('CLOSE_SOCKET')
            }
        }
    })
    
    export default store
    
    

    然后在根目录的main.js文件开头引入:

    import store from './store'
    

    再在vue上挂载:

    Vue.prototype.$store = store
    const app = new Vue({
        ...App,
        store
    })
    

    在任意页面都可以全局使用,初始化websocket

    this.$store.dispatch('WEBSOCKET_INIT', 'websocket ip')
    

    发送websocket数据:

    this.$store.dispatch('WEBSOCKET_SEND', '发送的数据')
    

    关闭websocket连接:

    this.$store.dispatch('CLOSE_SOCKET')
    

    相关文章

      网友评论

        本文标题:uniapp全局使用websocket

        本文链接:https://www.haomeiwen.com/subject/wjjqkltx.html