【问题标题】:EventMachine::HttpRequest and Keep-alive connectionEventMachine::HttpRequest 和 Keep-alive 连接
【发布时间】:2015-02-12 07:58:11
【问题描述】:

我正在使用以下代码运行几个 HTTP 请求,但第二个请求 (req2) 总是返回到 errback。

我在这里遗漏了什么明显的东西吗?

request_options = {
  :body => " ",
  :keepalive => true,
  :head => {
    'content-type' => 'application/json',
    'accept' => 'application/json',
    'Accept-Encoding' => 'gzip,deflate,sdch'
  }
}

EM.run do
  request_options[:path] = '/default/path'

  conn = EM::HttpRequest.new 'https://www.example.com'

  req1 = conn.post request_options
  req1.errback { p 'Uh, oh'; EM.stop }
  req1.callback do
    doc = JSON.parse req1.response

    # do stuff with doc

    request_options[:body] = 'post-data'
    request_options[:path] = '/new/path'

    req2 = conn.post request_options
    req2.errback { p 'Uh, oh'; EM.stop }
    req2.callback do
       puts req2.response
       EM.stop
    end
  end
end

【问题讨论】:

  • 您可以尝试的一个快速方法是对两个请求使用 request_options 哈希的不同副本。可能是EM::HttpRequest 很草率并修改了它给出的选项哈希(然后你将修改后的哈希传递给你的下一个调用,以为它就像你设置它一样,但实际上它是不同的)。
  • 感谢您的回答。我刚刚试过了,但它仍然返回 errback。
  • 太糟糕了,如果它那么容易就好了(但我认为这不是一个正确的答案,因此评论)。

标签: ruby eventmachine


【解决方案1】:

我使用 EM-Synchrony

解决了我的问题
gem install em-synchrony

安装此 gem 后,我可以使用以下代码使代码按预期工作。

request_options = {
  :body => " ",
  :keepalive => true,
  :head => {
    'content-type' => 'application/json',
    'accept' => 'application/json',
    'Accept-Encoding' => 'gzip,deflate,sdch'
  }
}

EM.synchrony do
  request_options[:path] = '/default/path'

  conn = EM::HttpRequest.new 'https://www.example.com'

  req1 = conn.post request_options
  doc = JSON.parse req1.response

  # do stuff with doc

  request_options[:body] = 'post-data'
  request_options[:path] = '/new/path'

  req2 = conn.post request_options
  puts req2.response

  EM.stop
end

我想我只是对 EM.run 执行异步请求和 di 的方式感到困惑。

【讨论】:

    【解决方案2】:

    您不能在响应回调中使用相同的连接对象。

    确保为第二个请求创建一个新的EM::HttpRequest.new 'https://www.example.com'。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-13
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 2014-03-07
      • 1970-01-01
      相关资源
      最近更新 更多