0

シナトラと並列の em-http-request を扱うのは初めてです。そして、1つの結果に結合/マージする方法と、EventMachine.stopのタイミングがわかりませんか? . このことを考慮:

get '/data/:query' do
  content_type :json

  EventMachine.run do
    http1 = EventMachine::HttpRequest.new('v1/').get
    http2 = EventMachine::HttpRequest.new('v2/').get

    http1.errback { p 'Uh oh nooooooo'; EventMachine.stop }

    http1.callback {
     // do some operation http1.repsonse
     Crack::XML.parse(http1.response).to_json
      EventMachine.stop
    }

    http2.callback {
     // do some operation http2.response
     Crack::XML.parse(http2.response).to_json
     EventMachine.stop
    } 

  end

  somehow merge 
  return merged_result

end
4

1 に答える 1

3

上記の例には競合状態があります。リクエストの 1 つが終了するとすぐにイベントループを停止します。これに対処するには、組み込みの "Multi" インターフェイスを使用できます。

EventMachine.run do
  multi = EventMachine::MultiRequest.new

  multi.add :google, EventMachine::HttpRequest.new('http://www.google.com/').get
  multi.add :yahoo, EventMachine::HttpRequest.new('http://www.yahoo.com/').get

  multi.callback do
    puts multi.responses[:callback]
    puts multi.responses[:errback]
    EventMachine.stop
  end
end

詳細については、em-http wiki ページを参照してください: https://github.com/igrigorik/em-http-request/wiki/Parallel-Requests#synchronizing-with-multi-interface

于 2013-11-06T16:02:05.287 に答える