Что не так в асинхронной загрузке URL с EM? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь получить несколько URL-адресов асинхронно, и только 1 URL успешно завершен. Пожалуйста, помогите выяснить причину из кода ниже и не понять, почему вместо обратного вызова обрабатывается errback ? Не могли бы вы указать на вопрос?

require 'eventmachine'
require 'em-http-request'

def url_handler(url)
  http = EventMachine::HttpRequest.new(url).get

  http.errback {
    puts "Oops #{url}"
    puts '-'*20
    EventMachine.stop
  }
  http.callback {
    puts "#{http.response_header.status} #{url}"
    # p http.response_header
    p http.response[0,60]
    puts '-'*20
    EventMachine.stop
  }
end

urls = [
  'https://www.cloudflare.com/robots.txt2', # 404, not found
  'http://example.com/',
  'https://www.cloudflare.com/robots.txt',
  'https://rubygems.org/gems/em-http-request/versions.atom',
  'http://twitter.com/robots.txt',
  # 'http://localhost/robots.txt',
]

EventMachine.run do
  urls.each {|url| url_handler(url) }
end

Пример вывода:

200 http://example.com/
"<!doctype html>\n<html>\n<head>\n    <title>Example Domain</tit"
--------------------
Oops https://www.cloudflare.com/robots.txt2
--------------------
Oops https://www.cloudflare.com/robots.txt
--------------------
Oops https://rubygems.org/gems/em-http-request/versions.atom
--------------------
Oops http://twitter.com/robots.txt
--------------------
...