[ruby][sinatra] Sinatraのハンドラ内でem-http-requestを使う
Sinatra+Thinで、どこかからHTTPで取得した結果を加工して出力したい、という場合、
require "open-uri" get("/") do open("http://example.com/"){ |f| f.read() } end
でもいいのですが、これだとexample.comからの返答待ちの間、EventMachineが完全に止まってしまうのがいまいちです。そこでem-http-requestを使おうとしたのですが、それにはハンドラのレスポンスを非同期に返す必要があります。どうするんだろうと思ったのですが、async_sinatraというものがあるようです。
$ sudo gem install async_sinatra em-http-request
require "sinatra/async" require "em-http" register(Sinatra::Async) aget("/") do http = EventMachine::HttpRequest.new("http://example.com/").get() http.callback() do body(http.response) end http.errback() do status(500) body("error") end end