因此,基本上我的目标是获得一些轻量级的ruby守护进程(或sidekiq/resque worker),通过http处理作业和通知其他应用程序。该应用程序本身不需要接收http请求,因此没有架子保持尽可能轻的重量。我可以在循环{}中运行一些ruby代码。
所以试着不使用EventMachine的反应器模式,而是使用光纤方法。在这个上下文中,我应该把EM.run或EM.stop放在哪里? Thread.new { EM.run }似乎不知道光纤,所以添加它不会产生回调?除了这一点,还有同步性的替代方案吗?
#slow=true injects a sleep 3, so page 2 callback should output faster
require 'em-http-request'
require 'fiber'
def http_get(url)
f = Fiber.current
http = EventMachine::HttpRequest.new(url).get
# resume fiber once http call is done
http.callback { f.resume(http) }
http.errback { f.resume(http) }
return Fiber.yield
end
puts "fetching some data from database for request params"
EventMachine.run do
Fiber.new{
page = http_get('http://localhost:3000/status?slow=true')
puts "notified external page it responded with: #{page.response_header.status}"
}.resume
Fiber.new{
page = http_get('http://localhost:4000/status')
puts "notified external page 2 it responded with: #{page.response_header.status}"
}.resume
puts "Finishised notification task"
end
puts "Moving on to next task as fast as possible"https://stackoverflow.com/questions/21086618
复制相似问题