加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Ruby中执行非阻塞I / O的首选方法是什么?

发布时间:2020-12-16 20:55:24 所属栏目:百科 来源:网络整理
导读:如果说我想检索一个网页进行解析,但是在I / O发生时不阻塞CPU.有没有相当于Python的Eventlet库的东西? 解决方法 Ruby的最佳HTTP客户端库是 Typhoeus,它可以用于以非阻塞方式并行执行多个HTTP请求.有一个阻塞和非阻塞接口: # blockingresponse = Typhoeus::
如果说我想检索一个网页进行解析,但是在I / O发生时不阻塞CPU.有没有相当于Python的Eventlet库的东西?

解决方法

Ruby的最佳HTTP客户端库是 Typhoeus,它可以用于以非阻塞方式并行执行多个HTTP请求.有一个阻塞和非阻塞接口:
# blocking
response = Typhoeus::Request.get("http://stackoverflow.com/")
puts response.body

# non-blocking
request1 = Typhoeus::Request.new("http://stackoverflow.com/")
request1.on_complete do |response|
  puts response.body
end
request2 = Typhoeus::Request.new("http://stackoverflow.com/questions")
request2.on_complete do |response|
  puts response.body
end
hydra = Typhoeus::Hydra.new
hydra.queue(request1)
hydra.queue(request2)
hydra.run # this call is blocking,though

另一种选择是em-http-request,它运行在EventMachine之上.它有一个完全无阻塞的界面:

EventMachine.run do
  request = EventMachine::HttpRequest.new('http://stackoverflow.com/').get
  request.callback do
    puts request.response
    EventMachine.stop
  end
end

与Typhoeus Hydra类似,还有一个用于并行发出许多请求的界面.

em-http-request的缺点是它与EventMachine绑定. EventMachine本身就是一个很棒的框架,但它是一个全有或全无的交易.你需要以一种平衡/延续传递方式编写整个应用程序,并且已知这会导致脑损伤. Typhoeus更适合尚未使用的应用程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读