Rails 求助! http 请求延迟处理响应

schwinn · 2014年11月25日 · 最后由 hanluner 回复于 2014年11月25日 · 3238 次阅读

我这有个需求,怎么让一个请求等待延迟任务(如resquesidekiq等处理)执行完才响应这个请求返回客户端? 场景像发送消息,B 消息比前一条消息 A 先到,但要等待 A 处理完后它才能执行 B,这时返回 B 的响应。

既然是执行完才返回,为什么还要做成后台任务?

场景像发送消息,B 消息比前一条消息 A 先到,但要等待 A 处理完后它才能执行 B,就是延迟执行 B。

我的思路:

  1. 客户端 post
  2. 服务器生成 uid 写到 cookie,任务进入队列
  3. 客户端跳转到新页面后,js 检查 cookie,有 tid 就向服务器轮询,任务完成后返回结果

当然,更普遍的情况是要么在请求线程内完成,要么丢到队列就不管了。这个请自行斟酌

#2 楼 @schwinn 如果 A 一直不到呢?

这个让我想到了写 ios 时候,等到 A 回来再进行 B. 直接 loading 等待着好了。如果不回来,就处理掉好了

谢谢大家,之前思路有问题。我这也是@hanluner说的 ios 客户端请求。B 正常响应回去告诉客户端我要 A,但任务主体放队列里,等 A 来一起处理,把结果返回。 @Rei 这时客户端知道 A 没到达,会重发 A 请求过来。

#6 楼 @schwinn 实际来说,你无需做得这么细。只要你有一个全局的网络状况控制就可以了。很多用户点击行为你是估算不到的。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号