从异步API获取结果

时间:2018-04-03 08:01:01

标签: php laravel lumen api-design beanstalkd

我正在构建用于处理Lumen的API,处理工作每个请求大约需要1-3秒。

到目前为止,我使用作业队列和beanstalkd来完成它并且它是异步的,这意味着我返回job_id,我可以稍后检查结果。

我也在编写PHP客户端来使用API​​,为此我想知道我是否应该包含'wait'参数服务器端或客户端?如果在服务器端实现等待,我将需要休眠并在调度作业后检查数据库的结果,然后在可用时返回结果(在接下来的1-5秒内直到可用),或者如果是客户端,我将需要睡眠并且如果作业完成并通过特定路线检查job_id并获得结果。

哪个选项更好?

1 个答案:

答案 0 :(得分:1)

我会有一个端点,其唯一的工作是检查工作ID并等待。没有选择等待其他终端上的结果,因为它会破坏异步性,消费者只会等待它更容易。

好的,客户端会发送作业并返回作业ID。

然后,您将该作业ID发送到等待端点,端点将等待/挂起,直到作业完成或失败。然后,您可以再次查询作业并获得结果。

这将阻止轮询服务器的需要,并且还可以通过需要睡眠,轮询,睡眠来阻止客户端阻塞。

像LXD操作端点一样升级:https://github.com/lxc/lxd/blob/master/doc/rest-api.md#10operationsuuidwait