我可以用Ruby的Typhoeus发出异步请求吗?

时间:2015-11-01 22:27:20

标签: ruby typhoeus

我正在使用Typhoeus并希望在不阻止响应的情况下发出单个请求。稍后,我可能会检查响应,或者我可能不会。关键是我不希望代码执行等待响应。

Typhoeus有没有办法内置这个?

否则我想我必须自己使用线程吗?

3 个答案:

答案 0 :(得分:0)

您可以尝试使用thread

response = nil

request_thread = Thread.new {
  # Set up the request object here
  response = request.response
}

从那里你可以检查response == nil以查看请求是否已经发出,你可以调用request_thread.join来阻止,直到线程完成执行。

答案 1 :(得分:0)

我建议调查Ruby的'unirest'宝石。

据我所知,Typhoeus阻止了'hydra.run'电话

使用Unirest,它不会阻止get / post / put / etc调用,但会继续运行。如果需要,可以将'对象'存储在散列或带有标识符的数组中,以便稍后检索,如下所示:

identifier_requests['id'] = Unirest.post(url,headers: headers, parameters: param, auth: auth)

然后阻止或检索响应,使用响应对象上的一个调用:

response_code = (identifier_requests['id']).code
response.body

http://unirest.io/ruby.html

答案 2 :(得分:0)

Typhoeus具有内置的非阻塞呼叫。从他们的文档中:

request = Typhoeus::Request.new("www.example.com", followlocation: true)

request.on_complete do |response|
  if response.success?
    # hell yeah
  elsif response.timed_out?
    # aw hell no
    log("got a time out")
  elsif response.code == 0
    # Could not get an http response, something's wrong.
    log(response.return_message)
  else
    # Received a non-successful http response.
    log("HTTP request failed: " + response.code.to_s)
  end
end

request.run

这来自他们在https://github.com/typhoeus/typhoeus上的文档