websocket 接收发送数据

1.websocket 方法

import { message } from 'ant-design-vue'
import i18n from '@/langs/index.js'
let socket = null
let handleMessage = null
let handleErr = null
//初始化连接websocket,监听websocket各状态
function initSocket(url) {
  if (typeof WebSocket === 'undefined') {
    message.error(i18n.t('public.websocket.noWebSocket'))
  }
  socket = new WebSocket(url)
  socket.onopen = (e) => {
    socketOnOpen()
  }
  socket.onmessage = (e) => {
    socketOnMessage(e)
  }
  socket.onerror = (e) => {
    socketOnError()
  }
  socket.onclose = (e) => {}
}

//连接成功后的操作
function socketOnOpen(e) {}

//接收到websocket传过来message后的操作
function socketOnMessage(e) {
  //handleMessage为组件中传过来的自定义的方法,判断是否传递过来该方法
  if (handleMessage) {
    handleMessage(JSON.parse(e.data))
  }
}

//连接错误后的操作
function socketOnError(e) {
  if (handleErr) {
    handleErr()
  }
}

//向websocket传递参数数据
function socketSend(data) {
  setTimeout(() => {
    if (socket.readyState === 1) {
      socket.send(JSON.stringify(data))
    } else if (socket.readyState === 3) {
      message.error(i18n.t('public.websocket.connectFailed'))
    }
  }, 500)
}

/** 发送websocket请求
 * @param {String} url 连接的websocket地址
 * @param {Object} data 需要传递的参数
 * @param {Function} handleData 获取websocket传过来的数据后的处理函数
 * @param {Function} handleError websocket连接出错后的处理函数
 */
export function connectSocket(url, data, handleData, handleError) {
  handleMessage = null
  handleErr = null
  if (handleData) {
    handleMessage = handleData
  }
  if (handleError) {
    handleErr = handleError
  }
  initSocket(url)
  socketSend(data)
}

//关闭webSocket
export function closeSocket() {
  if (socket) {
    socket.close()
  }
}

2. 使用

import { connectSocket, closeSocket } from './socket.js'

convert() {
 let data = {}
 let socketUrl = ''
 connectSocket(socketUrl, data, this.handleMessage)
},
handleMessage(data) {
 console.log(data)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值