Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
tree: e5fc8f0c2e
Fetching contributors…

Cannot retrieve contributors at this time

54 lines (42 sloc) 2.064 kb

Build Status

Most Ruby web API libraries use Net::HTTP (because it's ubiquitous), but I want to use them in my non-blocking EventMachine-based applications, and I don't want Net::HTTP to block. I therefore wrote this.

Using the magic of Ruby 1.9's Fibers, we monkeypatch Net::HTTP to use the faster, nonblocking em-http-request under the hood. Obviously this will only work from inside the EventMachine event loop, and from within a spawned fiber:

require 'em-net-http'

EM.run do
  Fiber.new do
    Net::HTTP.start('encrypted.google.com', :use_ssl=>true) do |http|
      res = http.get('/search?q=james')
      puts res.body
    end
    EM.stop_event_loop
  end.resume
end

The above will run without blocking your carefully-tuned nonblocking webapp.

There are a few tests (taking advantage of the very useful Mimic gem) that assert that responses are identical to those created by Net::HTTP. These are by no means exhaustive; if you're using Net::HTTP in some other way and the em-net-http's behaviour is not what you expect, do send me a failing test case.

Currently tested with Ruby (MRI) 1.9.1 and 1.9.2.

Caveat

The Net::HTTP API is a many-headed hydra -- I haven't patched much of it. Your mileage may therefore vary. Please feed me patches, pull requests and bug reports!

Thanks

Jump to Line
Something went wrong with that request. Please try again.