背景:需要在一次请求同时获取两个系统的结果,因此需要调用 2 个接口,因此增加了请求的耗时,因此想用 em 来解决这个问题: 问题 1:em 是否适用于此场景? 问题 2:为何 EM.stop 之后会导致 rails server 也跟着退出?难道应该不写 EM.stop 吗? 问题 3:如何解决这个异步问题?问题详情见代码注释:
def multi_request(request_info)
result = { }
EventMachine.run do
multi = EventMachine::MultiRequest.new
request_info.each do |index, value|
multi.add index.to_sym, EventMachine::HttpRequest.new(value[:url]).post(body: value[:body])
end
multi.callback do
result[:callback] = multi.responses[:callback]
puts "In EM: #{result.inspect}" # 这里的输出会在最后才打印出来
logger_format(multi.responses[:errback]) if multi.responses[:errback].present?
EventMachine.stop
end
end
p result # 会先前面的puts打印出来东西 #=> {}
result_format(result)
end