Rails nginx 连接超时问题

ice_7 · 2015年10月13日 · 最后由 zoker 回复于 2015年10月14日 · 2691 次阅读

Nginx设置了keepalive_timeout选项之后(设置的是 30~45s),程序中的文件上传或者数据 EXCEL 导出功能,如果是文件比较大或者导出的数据比较多的话,经常遇到服务器连接超时的问题,除了优化代码的性能之外,还有没有其他的解决方案?

我们以前是这样干的:

  1. 用户点击下载按钮后,立马 response,并返回导出文件的 唯一 id = 13(此时 id=13 的文件还没有生成)
  2. 创建一个异步任务去生成文件
  3. 页面通过 ajax 去循环查询 id=13 的文件有没有准备好
  4. 如果文件已经生成,则展示文件地址

肯定得是 1 楼放在后台异步处理的做法。假设一个场景,如果并发有多个用户在上传或导出时,这不把所有 unicorn worker 全阻塞了,还有机会响应其它 web 请求吗?

#1 楼 @xiaoronglv 谢谢你给的思路

这种肯定是要放在队列,我们也同样有这种场景,我们的做法是:

  1. 把任务放进队列,同时在 redis 中放一个状态
  2. 任务执行完,改变这个状态
  3. 通过查询这个状态,判断后续的程序行为
需要 登录 后方可回复, 如果你还没有账号请 注册新账号