我正在使用外部服务来执行搜索我的应用程序。需要错开消耗的外部API的轨道消耗
此搜索的结果需要从多个合作伙伴收集,需要10到90秒才能完成。在收集结果的同时,我反复轮询我的搜索会话以收集已经准备好的结果。
因为当我有新的结果时,我将这些通过SSE转移到客户端。
我每5秒左右轮询一次。
我应该如何运行这个过程,而不会让我的一个线程在90秒内运行(运行puma + nginx)。我需要保持控制器的状态,以将SSE推送给请求客户端,并且我不确定处理轮询之间延迟的最佳方式。
大加赞赏
我正在使用外部服务来执行搜索我的应用程序。需要错开消耗的外部API的轨道消耗
此搜索的结果需要从多个合作伙伴收集,需要10到90秒才能完成。在收集结果的同时,我反复轮询我的搜索会话以收集已经准备好的结果。
因为当我有新的结果时,我将这些通过SSE转移到客户端。
我每5秒左右轮询一次。
我应该如何运行这个过程,而不会让我的一个线程在90秒内运行(运行puma + nginx)。我需要保持控制器的状态,以将SSE推送给请求客户端,并且我不确定处理轮询之间延迟的最佳方式。
大加赞赏
你必须放弃的SSE,如果你真的想释放线程。为了接收SSE,浏览器保持与web服务器的长时间连接,并且在每个客户端连接将由单独的线程处理的情况下。
不过,如果你只想做的,你可以使用下面的策略部分结果查询:有一个在 - 在每个搜索请求例如sidekiq
另一种选择可能是移动通讯问题的事件触发服务器投票结果。 Evented Servers不会在每个连接上产生一个单独的线程,无论是否长期存在。 Faye是一个与轨道完美集成的服务器,这是一个完美的服务器。过程将是:
其实美洲狮多线程设置意图阻止你通过所有这些。 只要系统允许,我只会增加线程数和进程数,并查看其执行方式。添加更多内存或一些额外的服务器总是更便宜,并允许您专注于其他功能。
编辑1 反思什么实际上是朝着后台作业搜索的好处。Sidekiq也有自己的线程池,sidekiq线程与puma线程没有区别。无论如何,搜索任务必须完成。它的线程将在大部分时间暂停,为IO提供服务。所以,上述2个解决方案的唯一好处是适当的资源平衡。它允许您定义搜索作业将使用多少个线程,以及您的应用服务器有多少个线程。那么,怎么样以下策略:
你甚至可以从头并完全投票,只是坚持SSE
谢谢,这是伟大的。我想我应该像你说的那样做,并且现在要扩大我的资源。然后计划在接下来的几个月内迁离上交所。再次感谢。 – RMcNairn
对此有更多的想法。检查编辑 –