我有一个要求,我对它的设计有点困惑。
Requirement:iOS调用后端(Java),后端调用cloud,后者返回未来调用的令牌。云API可能需要大约6到10秒才能返回实际结果,因此它不会等待6到10秒,而是返回一个令牌,并让调用者(在我的例子中是后端java服务器)来获取结果。
Current Approach:iOS调用后端(java服务器),后端调用cloud和get的令牌,然后将线程休眠1秒,一旦线程被调用,就会命中cloud以获得状态,如果状态未完成,则再次调用thread.sleep,直到cloud调用得到完整的结果。一旦cloud返回结果,后端就会将结果返回给iOS。
这种方法是不可扩展的,是用来测试云API的,但是现在我们需要一种更可伸缩的方法。
--这就是我对 iOS调用后端的想法,后端调用API并将结果发送给iOS(它只显示一些静态屏幕以保持用户的参与),同时它将对象放入Spring池执行器中。执行器每一秒点击API并通过推送通知更新iOS,然后继续执行,直到从cloud获得最终结果为止。
这比现有的方法更好,但是即使这样看起来也不具有可伸缩性,线程池执行器在一段时间后就会耗尽(使其变慢),而且thread.sleep也不是一个好的选择。
我考虑过使用AWS,但它没有提供实时处理和每1秒运行后台作业,这似乎不是一个好的选择。
我还在探索Apache,并试图了解它是否适合我的用例。
让我知道,如果有人做了类似的用例。
发布于 2017-03-02 03:20:38
我正在考虑使用(让我们称之为cloudApiCall),一旦从Cloud接收到令牌,我将向执行器提交一个未来的作业,并将令牌返回给Mobile。与ConcurrentTaskExecutor相关的线程将选择作业,调用Cloud并将响应提交给另一个ConcurrentTaskExecutor(让我们称之为pushNotification),后者将负责将无声通知推送给移动客户端。线程关联的ConcurrentTaskExecutor(cloudApiCall)也将检查调用的状态,如果需要以后的调用,它将将作业提交回ConcurrentTaskExecutor(cloudApiCall)。这将继续下去,直到我们得到完全的回应。
https://stackoverflow.com/questions/42503159
复制相似问题