2011-11-22 5 views
0

私はSinatraアプリケーションのPOSTメソッドの一部として別のサーバーにリクエストしています。要求を行うために使用しているライブラリは、要求が行われたときにすぐにEM :: Deferrableオブジェクトを返すEventMachineライブラリですが、非同期要求が完了するまでコントローラメソッドでブロックする必要があります。要求で返されたデータこれを行うための最良の方法は何ですか?EventMachineの遅延オブジェクトをブロックするにはどうすればよいですか?

+0

ThinのようなEM Webサーバーを使用していますか? – tbuehlmann

答えて

1

async_sinatraとEMベースのWebサーバーThinの1つの解決方法があります。 async_sinatraを使用すると、明示的レンダリングの方法はbodyになります。

require 'sinatra/async' 
require 'em-http-request' 

class Application < Sinatra::Base 
    register Sinatra::Async 

    apost '/' do 
    http = EM::HttpRequest.new('http://www.google.de/').get 

    http.callback do 
     body do 
     # your http processing in here, will be rendered 
     end 
    end 

    http.errback do 
     body { 'error' } 
    end 
    end 
end 
+0

これは完全に機能しました。ありがとう! – Bryan

0

イベントを発生したAPIでブロックすると、2つの世界のうち最も悪いものになります。

私は、より伝統的な方法(ラ・カール)に賛成するEMを通した呼び出しを避けようとします。

これが不可能な場合は、空の部分を返し、クライアントにサーバーの更新をポーリングしてもらいます。

関連する問題