3
예제 코드는 here에서 뒤에 논리를 설명해주십시오 :이 루비 섬유 예를
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
EventMachine.run do
Fiber.new{
page = http_get('http://www.google.com/')
puts "Fetched page: #{page.response_header.status}"
if page
page = http_get('http://www.google.com/search?q=eventmachine')
puts "Fetched page 2: #{page.response_header.status}"
end
}.resume
end
그래서, EM 실행 블록의 맥락에서, 저자의이 섬유를 생성하고 resume
으로 즉시 실행. 그러나, 나는 왜 그런 식으로 http_get
논리가 구조화되는지 이해하지 못한다. 내 말은, 그것은 현재의 광섬유 (이 경우에는 EM 실행 블록에서 생성 된 것이어야 함)를 취하는 것이며, 실패하거나 성공할 수있는 http 요청을 시작하고 현재 광섬유를 다시 시작합니다. 이후에는 광섬유에 yield
이 호출됩니다. 그가 수익을 부르고 있기 때문에 정확히 무엇이 운영 될 것입니까? 누군가 http_get
이 그런 식으로 쓰여진 이유를 설명해 주실 수 있습니까?
왜 광섬유를 일시 정지해야합니까? 또한 코드는 'puts'에서 멈 춥니 다. 가져온 페이지 : # {page.response_header.status} "'광섬유가 실행되고 완료 될 때까지? – Geo
을 사용하여 EventMachine에 손을 넘기십시오 – apneadiving
감사합니다. 이제는 분명합니다. EM 경험이 있으니 http://stackoverflow.com/questions/12663944/how-can-i-load-all-the-objects-inside-a-table-and-keep에서 잠시 살펴볼 수 있습니까? -eventmachine-responsive? 어쩌면 내가 뭘 잘못하고 있는지 알아낼 수 있을까? – Geo