新手问题 Rails 报表 API 后端需要很久才返回结果,不想客户端出现太多 timeout 该怎么办呢?

whh · 2013年11月16日 · 最后由 ZombieCoder 回复于 2013年11月17日 · 3530 次阅读

但想直接把数据以 json 格式返回给客户端,配置 web/app server 的 timeout 吗?还是可以使用 eventmachine 之类的呢?

实时生成的数据?如果 DB, 代码不能更快,那只能异步

先分析到底哪里慢。

这里不是慢的问题,比如要提供过去几个月复杂的报表是需要很久。想了解的是像一楼所说如果想实时提供数据,应该要注意哪些问题(还是只需处理 request 返回 response,无需做特殊处理就好了?)

@whh 你这种显然不适合实时处理啊,你后台需要很久的时间来处理计算数据,让用户等待?还有服务计算时间长,请求过多,服务器性能可能又是一个问题了。

#3 楼 @whh 过去几个月的复杂报表有没有可能只生成一次然后存下来 这样再怎么调用都不再计算了 要是你每次都事实计算 N 年的数据 用什么都没戏

几个月报表显然是提前算好,存数据库的。 客户端请求的时候直接返回结果。

做定时任务在服务端压力小的时候运行

对于会 timeout 的,我一般用异步(Sidekiq),前端轮询任务状态,完成就给链接下载

#6 楼 @kgen 谢谢大家的回复,我举例几个月只是想描述为何报表会比较久哈,实际上用户可以任意设置时间段,提前生产好数据好像也不是很好的办法

11 楼 已删除

ajax 加载数据,timeout 设置长一点,会有什么问题

13 楼 已删除

#12 楼 @as181920 研究了下,超时时间是会取 server/client 设置的最小 timeout 时间。目前最好的解决办法看来还是后台异步处理

15 楼 已删除

#15 楼 @whh_c 你的号是我封的,因为你说脏话且直接对其他会员人身攻击,超出了我的容忍范围。

如果有这样的接口,就分成两个接口,一个是执行这个操作的接口,一个取结果的接口 执行接口接收到执行请求后直接返回一个操作成功的响应 客户端得到后循环调取结果的接口 循环时间就可以直接以业务层来自己决定了

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