哆啦的時光機(jī)
2018-08-03 09:25:23
問:現(xiàn)有情況為:http://api.test.com/test.php?cf=經(jīng)常訪問失敗,經(jīng)與服務(wù)端協(xié)商,服務(wù)端又提供了兩個備用IP分別為:111.***.***.***和106.**.***.***,請您寫出可以讓http://api.test.com/test.php?cf=訪問成功概率增加的前端程序;哎,沒思路,沒做出來~
2 回答

繁華開滿天機(jī)
TA貢獻(xiàn)1816條經(jīng)驗 獲得超4個贊
我會這么做:
用一個數(shù)組保存三個請求地址,用一個變量保存實際可用地址,默認(rèn)值為最常用的那個。
當(dāng)發(fā)生第一次請求的時候,使用 Promise 并行發(fā)起三個請求,誰先返回用誰,并把成功的請求地址賦給上面說的變量。此后的請求就只需要使用一個地址便可
這個過程應(yīng)該單獨封裝起來以備后續(xù)還需要檢查。
原生的 Promise 需要改造來應(yīng)對并行請求的 race condition,若條件允許,會直接使用第三方庫如 bluebird 或 RSVP 等等。
重點是必須并行請求,然后利用竟態(tài)來阻斷后發(fā)生的兩個請求,也就是當(dāng)數(shù)組中的一個 Promise 被 resolve 之后,剩下的就不再管它了。傳統(tǒng)的回調(diào)方式你需要在回調(diào)內(nèi)部判斷可用地址變量是否已存在然后決定是否跳過后續(xù)邏輯,但請求本身都是完成的;又及你無法事先知道哪個接口會失敗,所以你還得逐個處理 errors;所以我用帶竟態(tài)控制的 Promise,原因就是以上。
但我還是覺得一定要在前端做嗎?這個明顯去弄個反向代理更合理。
添加回答
舉報
0/150
提交
取消