Skip to content
Monkeypatching Net::HTTP to play ball with EventMachine.
Ruby
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib
spec
.document
.gitignore
.travis.yml
Gemfile
LICENSE
README.md
Rakefile
VERSION
em-net-http.gemspec

README.md

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

Something went wrong with that request. Please try again.