[英]Returning multiple asynchronous responses
我目前正在寻找建立一个接受请求的端点,并在加载时以递增的方式返回响应数据。
这样做的应用是,给定一个数据上传,我想为该数据计算许多不同的指标。 随着每个指标的异步计算,我想将此指标的值返回到前端进行渲染。
为了进行测试,我的控制器如下所示,尝试使用res.write
uploadData = (req, res) => {
res.write("test");
setTimeout(() => {
res.write("test 2");
res.end();
}, 3000);
}
但是,我认为问题源于我在React-Redux中编写的客户端,并通过Axios调用来调用该路由。 据我了解,这是因为axios请求在收到第一个响应后便关闭,并且连接不会保持打开状态。 这是我的axios调用的样子:
axios.post('/api', data)
.then((response) => {
console.log(response);
})
.catch((error) => {
console.log(error);
});
是否有捷径可寻? 我也考虑过流式传输,但是我对流式传输的关注是,我希望每个连接在短时间内打开(即仅在计算指标时打开)的客户端之间是直接且唯一的。
我还应该提到,上载的资源是数据库,并且我想避免由于多个端点而多次解析和打开连接。
预先感谢,如果可以提供更多背景信息,请告诉我
在仍然使用传统API的情况下处理此问题的一种方法是将指标存储在某个对象(例如数据库或Redis)中的某个位置,然后长时间轮询资源。
对于一个真实的例子,假设您要计算以下foo,度量时间,请求长度,bar和foobar的度量。
您可以在存储中创建一个如下所示的对象:
{
id: 1,
lengthOfRequest: 123,
.....
}
那么您将在API中创建一个类似于metrics/{id}
的终结点并返回该对象。 只要继续呼叫路由,直到一切完成即可。
当然,这样做有一些明显的弊端,但是一旦您获得足够的信息来了解度量平均需要花费多长时间,就可以调整两次调用API之间的时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.