我正在构建一个简单的应用程序。您将查询放在许多表单元素中,然后单击“提交”。
这会向第三方API提交(相当)大量的API调用,以在第三方应用中创建必要的对象,执行它们,然后将结果返回到我的应用。
这个过程需要5-30秒。
我想要做的是将结果部分呈现(想想SQL IDE,如SSMS或TOAD或其他 - 在顶部输入,返回下面的结果)。并且我希望在流程中的每个步骤之后刷新该部分并向用户显示任务的状态。目前,应用程序只是坐下来旋转,直到所有这些复杂的IO重型业务逻辑完成,这导致了糟糕的用户体验。
因此,我们可以说第三方API采取的步骤是:
创建小部件
启动小部件
监控窗口小部件状态
完成后,将最终结果返回给用户。
我想要做的是有一个变量,比如@status,它包含上述过程的当前执行。 “创建小部件......”等等。当任务完成时,这将显示给用户。
如果其中一项任务完成,我怎么能重新渲染部分?它应该轮询服务器吗?在上述步骤完成之前,如何在没有线程锁定的情况下轮询正在运行服务器端的进程?
目前,这不会写入数据库,并且由于负载限制,我希望尽可能多地保留数据库。
现在,我知道轮询到一个动作的不同方法(AJAX通过jquery),主要是使用setinterval / timeout来调用控制器动作并重新渲染,但是如果我的API调用方法在该动作中被引用,它只是等到它完全都完成了。
有什么想法?
答案 0 :(得分:0)
作为草图解决方案/算法:
更新可以建模为: