【问题标题】:Obtaining result from async API从异步 API 获取结果
【发布时间】:2018-04-03 16:23:34
【问题描述】:

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

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

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

哪个选项更好?

【问题讨论】:

    标签: php laravel lumen api-design beanstalkd


    【解决方案1】:

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

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

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

    这将避免轮询服务器的需要,并且还可以防止客户端因需要休眠、轮询、休​​眠而阻塞。

    Abit like LXD 操作端点:https://github.com/lxc/lxd/blob/master/doc/rest-api.md#10operationsuuidwait

    【讨论】:

      猜你喜欢
      • 2014-01-19
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多