華為聯機對戰服務玩家掉線重連案例總結

華為開發者論壇發表於2022-06-30

華為聯機對戰服務斷線重連解決方案

遊戲過程中,經常會發生網路波動等異常情況,導致玩家掉線,此時如果網路恢復仍希望玩家加入到原遊戲中,可以通過下面的方式進行重連。允許重連時間可以在AppGallery Connec控制檯進行設定。

網路異常導致掉線場景

網路異常導致玩家客戶端與聯機對戰服務端連線不上,在一定週期後伺服器會將該玩家設定會掉線狀態,如果遊戲允許玩家在短時間內網路恢復後重新接入網路則需要使用掉線重連線口實現該場景。
具體是玩家進入房間後,遊戲通過room.onDisconnect(playerInfo)方法監聽玩家掉線事件,該方法會返回玩家資訊。判斷如果是玩家自己掉線,則需要觸發room.reconnect()方法重連,重連過程如果網路始終未恢復則一直嘗試重連,如果網路恢復則根據結果處理,可能超過允許重連時間則跳轉到其他遊戲頁面。

room.onDisconnect((playerInfo) => {
    // 當前玩家斷線
    if(playerInfo.playerId === room.playerId){
       // 重連邏輯
       reConnect();
       }else{
        //其他玩家掉線處理
    }
}

reConnect() {
    // 呼叫重連方法進行重連
    room.reconnect().then(() => {
        //重連成功
    }).catch((e) => {
        if (!e.code) {
            // 網路不通繼續重試
            this.reConnect();
            return;
        }
        if (e.code != 0) {
            // 超過允許重連時間退出到其他頁面
        }
    });
}

關閉客戶端導致掉線

玩家關閉客戶端重新開啟後仍希望重連上一局遊戲,此時可以在初始化介面返回中判斷玩家是否仍然在有效房間內,如果仍然在說明其仍然在允許重連時間內,可以使用加入房間介面重新加入。如果此時不希望加入上一局遊戲,則必須先呼叫介面離開該房間才能重新正常建立房間。

client.init().then(() => {
    // 初始化成功
    if(client.lastRoomId){
      // 當前玩家仍在上一房間內,可根據lastRoomId重新加入房間
      // 如果不想加入上一個房間內,必須通過client.leaveRoom離開房間,否則新建房間或匹配房間時會報錯:玩家已在房間內
    }
  }).catch(() => {
    // 初始化失敗
  });

相關文章