做一个从学校图书馆抓取数据的程序,用 open-uri 来打开网页,再抓取内容,但是这个时间远超出 30s.
用 sinatra 做服务器,是不是有哪种方法可以让它用 worker 在后台读,读完之后再返回给客户端。而不是根据 timeout 就停止请求?
再或者直接修改这个 timeout 值?
解决了: heroku 的 timeout 貌似是服务器转向 Nginx 里的设置,实际上在 dynos 中仍然运行着你未完的操作. 所以可以: (1) 在服务器上另开一个线程,sleep 20 秒,如果处理结果还没结束就返回一个"waiting", (2) 客户端收到 waitting 信息后,settimeout 5 秒后用 ajax 重连 (3) 服务器在新开的线程中将处理结果写到一个 hash 的 application 变量中,再次连接时将信息取出并删除变量. 这样就可以了...(貌似本身就是很弱智的一个问题)