首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用EventMachine测试ruby中的异步HTTP请求

如何使用EventMachine测试ruby中的异步HTTP请求
EN

Stack Overflow用户
提问于 2013-02-20 15:47:07
回答 2查看 492关注 0票数 1

我正在接收RabbitMQ队列的消息,每条消息都是我想向其发出请求的一个网址。现在,我使用AMQP订阅队列,该队列使用EventMachine,因此我使用em- http -request库发出http请求。根据这里的文档:https://github.com/igrigorik/em-http-request/wiki/Parallel-Requests将发出异步http请求:

代码语言:javascript
复制
EventMachine.run {
    http1 = EventMachine::HttpRequest.new('http://google.com/').get
    http2 = EventMachine::HttpRequest.new('http://yahoo.com/').get
    http1.callback { }
    http2.callback { } 
end

因此,当我订阅RabbitMQ队列时,我有以下代码:

代码语言:javascript
复制
x = 0
EventMachine.run do
    connection = AMQP.connect(:host => '127.0.0.1')
    channel  = AMQP::Channel.new(connection)
    channel.prefetch(50)
    queue    = channel.queue("http.requests")
    exchange = channel.direct("")

    queue.subscribe do |metadata, payload|
        url = payload.inspect
        eval "
        @http#{x} = EventMachine::HttpRequest.new(url).get
        @http#{x}.callback do
            puts \"got a response\"
            puts @http#{x}.response
        end
        x = x+1
        "
    end
end

这会动态地创建新的变量并创建新的http请求,类似于em-http-request文档中描述的方式。但是,有没有一种方法可以测试请求是否实际上是异步发出的呢?是否可以在每次get请求被触发时都写入控制台,这样我就可以看到它们一个接一个地被触发,而不等待响应?

EN

回答 2

Stack Overflow用户

发布于 2013-03-01 06:15:26

您可以尝试运行tcpdump并分析输出。如果您看到两个连接的TCP三次握手是交错的,则说明连接是并行发生的。

但是,如果这是您要尝试的目标,那么这不可能真正成为自动化测试的一部分。我很乐意验证这个库只做了一次它所说的事情,而不是使它成为测试套件的一部分。

票数 1
EN

Stack Overflow用户

发布于 2013-02-24 20:48:14

一个非常简单的例子,确切地演示了你想要什么:

代码语言:javascript
复制
require 'em-http-request'

EM.run do
  # http://catnap.herokuapp.com/3 delays the HTTP response by 3 seconds.
  http1 = EventMachine::HttpRequest.new('http://catnap.herokuapp.com/3').get
  http1.callback { puts 'callback 1' }
  http1
  puts 'fired 1'

  http2 = EventMachine::HttpRequest.new('https://www.google.com/').get
  http2.callback { puts 'callback 2' }
  puts 'fired 2'
end

输出(对我来说):

代码语言:javascript
复制
fired 1
fired 2
callback 2
callback 1

根据你的互联网连接,Heroku和Google,对第二个HTTP请求的响应可能会首先出现,你可以肯定,这些请求确实是并行完成的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14974724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档