如何在Rails中长时间运行的同步请求中生成响应?

时间:2012-01-01 13:36:50

标签: ruby-on-rails synchronous

我很难弄清楚如何使用Rails来做到这一点,尽管可能是因为我不知道它的正确用语。

我基本上想要这样做:

def my_action
    sleep 1

    # output something in the request, but keep it open
    print '{"progress":15}'

    sleep 3

    # output something else, keep it open
    print '{"progress":65}'

    sleep 1

    # append some more, and close the request
    print '{"sucess":true}'
end

然而,我无法弄清楚如何做到这一点。我基本上想要复制一个缓慢的互联网连接。

我需要这样做,因为我正在抓取网站,这需要时间,我在上面“睡觉”。

更新 我正在使用iOS阅读本文,所以我认为我不想要一个websocket服务器。

3 个答案:

答案 0 :(得分:0)

你可能想要阅读HTML5 WebSockets(旧版浏览器有向后兼容的黑客),它可以让你从服务器将数据推送到客户端。

Rails有许多方法可以实现WebSockets服务器。这个问题提供了一些选项Best Ruby on Rails WebSocket tool

答案 1 :(得分:0)

如果这可以在服务器端工作,你会如何在客户端处理它? HTTP请求通常只能有一个响应(在使用流时可能会被分块,这在我认为的情况下不起作用)。

我猜你要么必须查看websockets,要么为每一步做出单独的请求。

答案 2 :(得分:0)

也许这正是您所寻找的:

Infinite streaming JSON from Rails 3.1