关于webman请求问题

mings

问题描述

现在手上有个项目,数据均为通过http查询第三方再返回给客户端。
其中有两个产品查询的API,对方文档建议通过如下方式调用:
1、並行发起两个或以上查询;
2、当获取到status=complete或超出3秒终止查询。

实际上现在测试出结果如下:
第一次请求----500ms,返回结果空,status=in-process
第二次请求----900ms,返回结果空,status=in-process
.....
第五次请求----3000ms,返回10条数据,status=complete

想咨询,
如何通过webman如何能同时发出2个并行请求,并且需要限制总请求时间,还有需要把結果返回给前端?
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、另外想咨询下,如果部分数据为第三方提供,部分数据为数据库查询,大家有好的方法进行数据汇聚吗?(主要考虑分页问题)

835 1 1
1个回答

mings

问题一已经解决了。暂时使用nodeJs代理请求,
nodeJs处理第三方api查询,类似上面的伪代码,限制了3s内必定返回或返回部分查询结果。
整体流程大概是:client -> webman(curl) -> nodeJs(local) -> API;
论坛上也找到了一些相关的,如通过webman的process自定义进程进行查询或者通过swoole驱动,或通过reactPHP来达到目的,但由于对以上不熟悉,不知道是否可以类似nodeJs这样去弄,所以放弃了。

问题二:暂时还是想不到什么好的解决方案。

  • 暂无评论
年代过于久远,无法发表回答
×
🔝