我有以下要求。我正在创建一个将接收发布和获取请求的Web应用程序(无前端)。它的功能如下。客户端将在URL上发布一个帖子,触发大量且耗时的任务。客户还可以发出Get请求并检索tak的结果。
我正在考虑使用Celery来启动任务。任务是一个非常大的算术计算。我的问题是如何通知客户他触发的任务已经完成,他可以检索结果。
所以我这样想:
client ->posts to web app -> web app starts task to celery -> request closed
web app notifies -> client triggered task # what is the proper way
client -> get request to web app -> web app returns result
我知道没有一个正确的方法,所以我'会更具体一点。暂时,任务将由另一个烧瓶应用程序自动触发。是否有一种方法可以自动通知烧瓶应用程序任务已完成并获取结果并将其存储在自己的数据库中?第二个问题是什么是最通用的解决方案,即使客户端是烧瓶应用程序,Android应用程序和IOS应用程序等也可以工作。
我之所以提出这个问题的原因是因为我讨论了api将结果发回给客户或客户是否应负责检查并获得结果。
答案 0 :(得分:8)
我过去不得不做出类似的决定,客户需要在完成长期运行的芹菜任务后更新。设计系统有许多不同的方法来解决问题:
对于最通用的解决方案,可能是状态端点或WebSockets - Android& iOS内置了HTTP功能,可以使用库处理WebSockets。另一方面,回调URL解决方案特定于Flask。