You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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'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) 2.2.3 and 2.3.1.
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!