vue socket.js 及使用

创建socket.js


import Vue from 'vue';
const vm = new Vue;
let scoketUrl = process.env.VUE_APP_SOCKET  //接口地址
class wsSocket {
    constructor(opt) {
        this.ws = null;
        this.opt = opt || {};
        this.init(opt.key);
    }

    onOpen() {
        this.opt.open && this.opt.open();
        let that = this;
        that.ping();
        this.socketStatus = true;
    }

    init() {
        let wsUrl = scoketUrl
        if (wsUrl) {
            this.ws = new WebSocket(wsUrl);
            this.ws.onopen = this.onOpen.bind(this);
            this.ws.onerror = this.onError.bind(this);
            this.ws.onmessage = this.onMessage.bind(this);
            this.ws.onclose = this.onClose.bind(this);
        }

    }

    ping() {
        var that = this;
        this.timer = setInterval(function () {
            that.send({ type: 'ping' });
        }, 10000);
    }

    send(data) {
        return new Promise((resolve, reject) => {
            try {
                this.ws.send(JSON.stringify(data));
                resolve({ status: true });
            } catch (e) {
                reject({ status: false })
            }
        });
    }

    onMessage(res) {
        this.opt.message && this.opt.message(res);
    }

    onClose() {
        this.timer && clearInterval(this.timer);
        this.opt.close && this.opt.close();
    }

    onError(e) {
        this.opt.error && this.opt.error(e);
    }

    $on(...args) {
        vm.$on(...args);
    }
}


function createSocket(key) {
    return new Promise((resolve, reject) => {
        const ws = new wsSocket({
            key,
            open() {
                resolve(ws);
            },
            error(e) {
                reject(e)
            },
            message(res) {
                if (res.data) {
                    const { type, data = {} } = JSON.parse(res.data);
                    vm.$emit(type, data);
                }
              
            },
            close(e) {
                vm.$emit('close', e);
            }
        })
    });
}


export const scoket = createSocket()

使用

import { scoket } from "@/utils/socket";
export default {
	 mounted() {
        scoket.then((ws) => {
            ws.$on('typeName', (data) => {  //typeName 为socket的type类型
            	//传过来的数据
            })
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值