現(xiàn)在手上有個(gè)項(xiàng)目,數(shù)據(jù)均為通過(guò)http查詢(xún)第三方再返回給客戶端。
其中有兩個(gè)產(chǎn)品查詢(xún)的API,對(duì)方文檔建議通過(guò)如下方式調(diào)用:
1、並行發(fā)起兩個(gè)或以上查詢(xún);
2、當(dāng)獲取到status=complete或超出3秒終止查詢(xún)。
實(shí)際上現(xiàn)在測(cè)試出結(jié)果如下:
第一次請(qǐng)求----500ms,返回結(jié)果空,status=in-process
第二次請(qǐng)求----900ms,返回結(jié)果空,status=in-process
.....
第五次請(qǐng)求----3000ms,返回10條數(shù)據(jù),status=complete
想咨詢(xún),
如何通過(guò)webman如何能同時(shí)發(fā)出2個(gè)并行請(qǐng)求,并且需要限制總請(qǐng)求時(shí)間,還有需要把結(jié)果返回給前端?
nodeJs下我想到的方法如下:
const getList = (keyword) => {
retrun new Promise(resolve => {
fetch(`/resource-list/${keyword}`).then(res => {
if(res.status === 'complete'){
resolve(res)
}else{
setTimeout(async () => {
resolve(await getList(keyword))
},250)
}
})
})
}
const race = Promise.race([
getList('aaa'),
getList('aaa'),
new Promise((resolve,reject) => {
setTimeout(() => reject(new Error('request timeout')),3000)
})
])
2、另外想咨詢(xún)下,如果部分?jǐn)?shù)據(jù)為第三方提供,部分?jǐn)?shù)據(jù)為數(shù)據(jù)庫(kù)查詢(xún),大家有好的方法進(jìn)行數(shù)據(jù)匯聚嗎?(主要考慮分頁(yè)問(wèn)題)
問(wèn)題一已經(jīng)解決了。暫時(shí)使用nodeJs代理請(qǐng)求,
nodeJs處理第三方api查詢(xún),類(lèi)似上面的偽代碼,限制了3s內(nèi)必定返回或返回部分查詢(xún)結(jié)果。
整體流程大概是:client -> webman(curl) -> nodeJs(local) -> API;
論壇上也找到了一些相關(guān)的,如通過(guò)webman的process自定義進(jìn)程進(jìn)行查詢(xún)或者通過(guò)swoole驅(qū)動(dòng),或通過(guò)reactPHP來(lái)達(dá)到目的,但由于對(duì)以上不熟悉,不知道是否可以類(lèi)似nodeJs這樣去弄,所以放棄了。
問(wèn)題二:暫時(shí)還是想不到什么好的解決方案。