我有一个Rails 3应用程序,允许用户通过API对第三方数据库进行搜索。它可能会带回相当多的XML数据。此外,API可能忙于为其他用户提供请求,并且响应时间有很大的延迟。
我只运行了2个网络服务器,所以我显然无法提供延迟请求。我使用Sidekiq
来处理长时间运行的作业,但在所有情况下,我都需要我不必将值返回到屏幕上。
我还使用Pusher
在后台作业完成时与用户进行通信。我正在检查它,但我不知道它是否可以用于我想要推送到屏幕的那种数据。现在它只是弹出对话框,其中包含我发送的消息。
我想到了一些非常怪异的东西,比如通过Sidekiq运行请求,将结果发送到会话对象或文件,然后使用Pusher启动某种事件来获取数据并用它填充屏幕。看起来像Rube Goldberg-ish。
我感谢任何人可以提供的任何帮助或见解!
答案 0 :(得分:1)
我不久前遇到了类似的情况,我修复的方式是使用内存缓存和线程。
我也考虑过使用Sidekiq,但是如果你不希望立即使用数据,Sidekiq是理想的,所以memcache和线程工作得很好,给了我们很大的控制权。
我没有直接调用API,而是将API请求分配给一个线程,这个线程一旦完成就会写入memcache,在我的情况下,这可以逐步发生,同一个API能够从同一个端点返回更多数据直到完成。
从UI我将有一个基本的ajax池机制,它会击中控制器并检查memcache的数据和状态以查看它是否完整,这会在UI上签署它需要保持池以获得更多数据