• websocket封装


     1 class SocketPlugin {
     2   constructor (param) {
     3     this.websocket = null
     4     this.isConnect = false
     5     this.timeoutNum = null
     6     this.isActivelyClose = false
     7     this.param = param
     8   }
     9  
    10 
    11   connect () {
    13     this.websocket = new WebSocket(this.param.url)
    14     this.initSocket(this.param)
    15   }
    16  
    17 
    18   initSocket (param) {
    19     this.isActivelyClose = false
    20  
    21 
    22     this.websocket.onclose = e => {
    23       console.log('websocket连接关闭~' + this.param.url)
    24       this.isConnect = false
    25       // 如果手动关闭则不进行重连
    26       if (!this.isActivelyClose) {
    27         this.reconnectSocket(param)
    28       }
    29     }
    30  
    31 
    32     this.websocket.onerror = e => {
    33       console.log('websocket发生异常~' + this.param.url + e)
    34       this.reconnectSocket(param)
    35     }
    36  
    37 
    38     this.websocket.onopen = () => {
    39       console.log('websocket已连接~ ' + this.param.url)
    40       this.isConnect = true
    41       if (param.hasOwnProperty('msg')) {
    42         this.send(param.msg || '')
    43       }
    44     }
    45  
    46 
    47     this.websocket.onmessage = e => {
    48       param.callback(JSON.parse(e.data))
    49     }
    50   }
    51  
    52 
    53   reconnectSocket (param) {
    54     if (this.isConnect === true) {
    55       return false
    56     }
    57     console.log('websocket 重新连接~ ')
    58     this.isConnect = true
    59     this.timeoutNum && clearTimeout(this.timeoutNum)
    60     this.timeoutNum = setTimeout(() => {
    61       this.connect(param)
    62       this.isConnect = false
    63     }, 1000)
    64   }
    65  
    66 
    67   /**
    68    * // websocket连接状态下才能进行send
    69    * @param {*} msg
    70    * 向服务send的消息
    71    */
    72   send (msg) {
    73     this.websocket.send(JSON.stringify(msg))
    74   }
    75  
    76 
    77   close () {
    78     this.isActivelyClose = true
    79     if (this.websocket) {
    80       this.websocket.close()
    81     }
    82   }
    83 }
    84  
    85 
    86 export default SocketPlugin
    使用:
     1 let  socketConfig: {
     2         url: '/ints/websocket/test',
     3         callback: this.getSocketMsg,
     4         msg: {
     5           fanId: '01'
     6         }
     7      }
     8  
     9 let  testSocket = new SocketPlugin(socketConfig)
    10 // 初始化
    11 testSocket .connect()
    12 // 发送消息
    13 testSocket .send(socketConfig.msg)
    14 // 关闭
    15 testSocket .close()
  • 相关阅读:
    hdu4846 最大子正方形(dp)
    hdu4847 水题
    hdu4847 水题
    hdu4848 DFS 暴搜+ 强剪枝
    hdu4848 DFS 暴搜+ 强剪枝
    洛谷 P4999 烦人的数学作业(数位DP)
    洛谷 P4317 花神的数论题(数位DP || 快速幂)
    洛谷 P2657 [SCOI2009]windy数(数位DP)
    洛谷 P2602 [ZJOI2010]数字计数(数位DP)
    HDU 2089 不要62(数位DP)
  • 原文地址:https://www.cnblogs.com/hlweng-0207/p/11912009.html
Copyright © 2020-2023  润新知