是否有可能(我认为这是很平常的事情)取消请求(也是在此请求之后已经在服务器上启动的方法)?
比如说,我从 Rails 应用程序请求在 youtube 或 vimeo 上进行视频搜索(在服务器上实现,并直接向 vimeo 或 youtube 发出进一步请求),但后来我决定取消这个搜索,所以我可以开始一个新的搜索,无需为已经无用的搜索结果浪费资源。所以所有请求都是通过 AJAX 完成的。
我想我应该:
要么定义一个全局变量(例如
cancel_req = 4939498348953
,每次取消将其设置为我希望取消的方法已知的某个特定 ID,同时设置为cancel = nil
. 所以在代码中的某些点只需检查这个变量(但是什么如果第 3 方 API 调用阻塞了很长的持续时间,因为它返回了很多数据?)或引入 redis 订阅(我认为这个任务有点过度设计)
但这两种方法在我看来都只是一种变通方法。有没有更好的方法来实现cancel
那些长期运行的方法,比如在自己的解决方案中请求 3rd 方 API?
更新:
在rails中是否有可能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) <--