2012-01-01 9 views
1

Railsを使用してこれを行う方法を理解するのに問題がありますが、それは適切な用語がわからないためです。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サーバーは必要ありません。

+0

用語は、後の「フラッシュ」です。各print()の後に出力をフラッシュしたいと思うかもしれません。 Rails 3.1の自動フラッシングに関する情報はhttp://yehudakatz.com/2010/09/07/automatic-flushing-the-rails-3-1-plan/ですが、直接関係はありません。 – mahemoff

答えて

0

サーバーからクライアントにデータをプッシュできるHTML5 WebSocket(古いブラウザの場合は下位互換性のあるハックがあります)を読んでほしいでしょう。

Railsには、WebSocketsサーバを実装するためのさまざまな方法があります。この質問にはいくつかのオプションがあります。Best Ruby on Rails WebSocket tool

0

これがサーバー側で動作する場合は、クライアント側でどのように処理しますか? HTTPリクエストには通常1つのレスポンスしかありません(ストリーミングを使用するとチャンクされる可能性がありますが、私の思うように動作しません)。

あなたはウェブソケットを調べたり、各ステップごとに別々のリクエストを行う必要があります。

+0

最新のブラウザのXMLHttpRequestは、新しいデータが到着したときに定期的にonreadystatechangeイベントを発生させるため、ブラウザで可能です。しかし、いずれにせよ、これはブラウザではなくスクレイパーなので、着信バッファから引き離すための簡単なネットワークプログラミングです。 – mahemoff

+0

私はiOSを使ってそれを読んでいるので、各ステップでそれを読むのはかなり簡単です。 – rdougan