是否有可能(我认为这是通常的事情)取消请求(也是在此请求后已经在服务器上启动的方法)?
比如说,我从rails应用程序请求在youtube或vimeo上进行视频搜索(在服务器上实现,并直接向vimeo或youtube发出进一步的请求),但后来我决定取消这个搜索,这样我就可以开始一个新的搜索,而不会放弃已经无用的搜索结果的资源。因此,所有请求都是通过 AJAX 完成的。
我想我应该:
-
要么定义一个全局变量(例如
cancel_req = 4939498348953
并且每次当cancell将其设置为我希望取消的方法已知的某个特定ID时,同时只需设置为cancel = nil
。因此,在代码中的某些点,只需检查此变量(但是如果第三方 API 调用阻塞持续时间很长,因为它返回的数据非常多,该怎么办? -
或者引入 Redis 订阅(我认为它对于这个任务来说有点过度设计)
但这两种方法对我来说听起来都只是一种解决方法。有没有更好的方法来达到这些长时间运行的方法cancel
,例如在自己的解决方案中请求第三方 API?
更新:
在带有callbacks
的轨道中是否有可能? 也许有yield
S?
更新2:
工作流如下:
client -> webserver -> rails-app-server (controller/helper) --->
|
foreignAPI // <-- break execution somewhere here (but of course still handle all other client requests, so - not exiting the application)
|
client <- webserver <- rails-app-server (controller/helper) <--
似乎您的问题只是阻止呼叫。考虑delayed_job运行异步任务 - 在您的情况下,这些长 API 调用。您可以将配置Delayed::Worker.max_run_time = 10.seconds
(或任何时间)设置为您愿意等待的限制,并且您能想到的几乎每个事件都有回调。