實時音影片Web接入——異常處理
- 2020 年 4 月 4 日
- 筆記
不同於一般的Web應用開發,實時音影片對網路品質的要求更高,過往對Web應用開發的經驗在實時音影片場景下是不夠的。下面我總結一些實際業務場景可能會遇到的問題,以及相應的處理方法。
在接入API文檔中,可以將錯誤類型大致分為2類,回調和通知。
回調錯誤符合常規的Web開發習慣,理解上也沒有難度,這裡我主要介紹通知類型的錯誤。
α. 怎麼辦
1. 處理流程
2. 程式碼示例
// 下面程式碼的 client 是 client實例 // https://www.qcloudtrtc.com/trtc-web-sdk/docs/api/Client.html // 異常監聽 client.on('error', error => { // 業務側數據上報 let errorCode = error.getCode() let errorCodeHex = `0x${errorCode.toString(16)}` console.error('[trtc] client error observed: ' + error) switch (errorCode) { case 0x4001: retryOrReload('websocket 初始化失敗', errorCodeHex) break case 0x4002: retryOrReload('websocket 信令通道異常', errorCodeHex) break case 0x4003: case 0x4005: retryOrReload('音影片數據傳輸通道錯誤', errorCodeHex) break case 0x4004: retryOrReload('進房失敗', errorCodeHex) break case 0x4041: retryOrReload('媒體傳輸服務超時', errorCodeHex) break case 0x4042: retryOrReload('遠端流訂閱超時', errorCodeHex) break case 0xffff: retryOrReload('未知錯誤', errorCodeHex) break default: retryOrReload(`錯誤程式碼 ${errorCode}(0x${errorCode.toString(16)})`, errorCodeHex) break } }) // 重連邏輯 // 建議有一個重連的上限,例如 3 次,這裡只做重連操作 const retryMaxTimes = 3 function retryOrReload(msg, code) { // 經過了若干次嘗試仍然無法重連成功 if ( retryTimes > retryMaxTimes) { alert( `網路狀態異常(${code}),請您檢查網路連接刷新頁面嘗試重連。`) return } // 重連邏輯,離開,再加入房間 client .leave() .then(() => { client.join({... }).catch(e => { retryOrReload(msg) }) }) .catch(e => { retryOrReload(msg) }) }
上面回答了怎麼辦問題。如果想了解背後的邏輯,可以往下看。
β. 為什麼
1. 錯誤的類型這麼多,為什麼最後只給用戶彈出一個網路狀態異常的提示?
用戶不是開發者,不必也無需了解這些背後的原因,你只需要告訴他結論,以及怎麼辦,就夠了。
2. 其他問題
可以評論留言