uni-app中WebSocket的使用

在data中定義好需要用到的變量

// 消息類
class MsgContent {
    constructor(param = {},action = 'heartbeat',controller = 'Index'){
        this.param = param;
        this.action = action;
        this.controller = controller;
    }
}
isSocketClose:false,    // 是否關(guān)閉socket
reconnectCount:5,       // 重連次數(shù)
heartbeatInterval:"",   // 心跳定時(shí)器
isStart:false,          // 是否啟動(dòng)設(shè)備

在methods中

sokcet(){
                try{
                    //WebSocket的地址
                    var url = this.$getUniAppConfig().xhr.socket
                    // 連接
                    uni.connectSocket({
                        url: url,
                        fail:(err)=>{
                            _this.$toast(JSON.stringify(err))
                        }
                    });
                    // 連接打開(kāi)
                    uni.onSocketOpen(function (res) {
                        console.log('WebSocket打開(kāi)'); 
                        //斷線后重連幾次
                        _this.reconnectCount = 5
                        // 5秒發(fā)送一次心跳
                        _this.heartbeatInterval = setInterval(()=>{
                            _this.sendMsg(new MsgContent({
                                name:'PING',
                                id:_this.equipmentData.id
                            }))
                        },5000)
                    });
                    // 監(jiān)聽(tīng)連接失敗
                    uni.onSocketError(function (res) {
                      console.log('WebSocket連接打開(kāi)失敗倡勇,請(qǐng)檢查棒旗!');
                   //停止發(fā)送心跳
                      clearInterval(_this.heartbeatInterval)
                  //如果不是人為關(guān)閉的話,進(jìn)行重連
                      if(!_this.isSocketClose){
                        reconnect(url)
                      }
                    });
                    // 監(jiān)聽(tīng)連接關(guān)閉
                    uni.onSocketClose(function (e) {
                        console.log('WebSocket連接關(guān)閉磷支!');
                        clearInterval(_this.heartbeatInterval)
                        if(!_this.isSocketClose){
                            reconnect(url)
                        }
                    });
                    // 監(jiān)聽(tīng)收到信息
                    uni.onSocketMessage(function (res) {
                        uni.hideLoading()
                        let serverData = JSON.parse(res.data)
                    //與后端規(guī)定好返回值分別代表什么纽甘,寫業(yè)務(wù)邏輯
                    
                    //判斷是否為同一設(shè)備,比如用戶去鏈接了其他設(shè)備,避免設(shè)備鏈接混淆
                        if(_this.equipmentId== serverData.data.user_equipment_type_id) {
                            if(serverData.code == 0) {
                             ...
                            }else if(serverData.code == 1){ 
                             ...
                          });
                    
                    const reconnect = this.$debounce((url) =>{  // 斷線重連
                        console.log(`第${5-this.reconnectCount}次斷線重連中...`)
                        this.reconnectCount --
                        if(this.reconnectCount <= 0){
                            this.$toast("error")
                           //如果重連次數(shù)為0钉跷,則做退出處理
                            uni.navigateBack({
                                delta:1
                            })
                        }else{
                            // 連接
                            uni.connectSocket({
                                url: url,
                            });
                        }
                        
                    },3000)
                }catch(e){
                    
                }
            }
    sendMsg(msg){   //向后端發(fā)送命令
                msg = JSON.stringify(msg)
                try{
                    //通過(guò) WebSocket 連接發(fā)送數(shù)據(jù)
                    uni.sendSocketMessage({
                        data: msg
                    });
                }catch(e){
                    this.isSocketClose = true;
                    uni.closeSocket()
                }
            },
        
    Tapstart(){ // 啟動(dòng)
                uni.showLoading({
                    title:'設(shè)備啟動(dòng)中...'
                })
                this.sendMsg(new MsgContent({
                 //啟動(dòng)設(shè)備需要的請(qǐng)求參數(shù)
                    id:_this.equipmentData.id,
                    equipment_status:_this.equipmentData.equipment_status,
                    uid:_this.equipmentData.uid
                },"start_equipment"))
            },
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市肚逸,隨后出現(xiàn)的幾起案子爷辙,更是在濱河造成了極大的恐慌,老刑警劉巖朦促,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犬钢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡思灰,警方通過(guò)查閱死者的電腦和手機(jī)玷犹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)洒疚,“玉大人歹颓,你說(shuō)我怎么就攤上這事∮秃” “怎么了巍扛?”我有些...
    開(kāi)封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)乏德。 經(jīng)常有香客問(wèn)我撤奸,道長(zhǎng)吠昭,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任胧瓜,我火速辦了婚禮矢棚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘府喳。我一直安慰自己蒲肋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布钝满。 她就那樣靜靜地躺著兜粘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弯蚜。 梳的紋絲不亂的頭發(fā)上孔轴,一...
    開(kāi)封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音碎捺,去河邊找鬼距糖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛牵寺,可吹牛的內(nèi)容都是我干的悍引。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼帽氓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼趣斤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起黎休,我...
    開(kāi)封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤浓领,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后势腮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體联贩,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年捎拯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泪幌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡署照,死狀恐怖祸泪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情建芙,我是刑警寧澤没隘,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站禁荸,受9級(jí)特大地震影響右蒲,放射性物質(zhì)發(fā)生泄漏阀湿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一瑰妄、第九天 我趴在偏房一處隱蔽的房頂上張望陷嘴。 院中可真熱鬧,春花似錦翰撑、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至瓜饥,卻和暖如春逝撬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乓土。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工宪潮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人趣苏。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓狡相,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親食磕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尽棕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355