require 'net/http'
urls = [
{'link' => 'http://www.google.com/'},
{'link' => 'http://www.facebook.com/'},
{'link' => 'http://www.yahoo.com/'}
]
urls.each do |u|
u['content'] = Net::HTTP.get( URI.parse(u['link']) )
end
print urls
This will work as procedural code.. I just want to hit a server, no issues about the order. How can i do that in ruby. One option is using threads.
Here's an example using threads.
require 'net/http'
urls = [
{'link' => 'http://www.google.com/'},
{'link' => 'http://www.facebook.com/'},
{'link' => 'http://www.yahoo.com/'}
]
urls.each do |u|
Thread.new do
u['content'] = Net::HTTP.get( URI.parse(u['link']) )
puts "Successfully requested #{u['link']}"
if urls.all? {|u| u.has_key?("content") }
puts "Fetched all urls!"
exit
end
end
end
Any better solution..??
PS:- i want to hit mixpanel, so that's why I just want to make a http call and dont wait for the response.
Asynchronous HTTP Request Processing is a relatively new technique that allows you to process a single HTTP request using non-blocking I/O and, if desired in separate threads. Some refer to it as COMET capabilities.
The HTTP asynchronous request-response behavior is asynchronous only because IBM® App Connect Enterprise treats the request and the response as such, enabling the message flow to retrieve the next message without waiting for the response from the asynchronous request.
Overview. AsyncHttpClient (AHC) is a library build on top of Netty, with the purpose of easily executing HTTP requests and processing responses asynchronously. In this article, we'll present how to configure and use the HTTP client, how to execute a request and process the response using AHC.
Ruby has an Async implementation! It's available today, it's production-ready, and it's probably the most awesome thing that's happened to Ruby in the last decade, if not longer. Async Ruby adds new concurrency features to the language; you can think of it as "threads with none of the downsides".
Lightweight Async handling is the job of Threads (as you said) or Fibers.
Otherwise, you should consider EventMachine which is a very powerful tool.
EDIT: The above URL for Event Machine is dead. Here is their GitHub account, https://github.com/eventmachine/eventmachine . It serves as a good starting point.
Here is a great article covering the topic.
Generally, viable alternatives to using threads for this would be the use of a Fiber or you could use em-http-request. In the latter example you could leave out the callback handling for your particular purpose.
If its just about plain http requests in async style, probably Unirest is the best fit to achieve it.
Asnc request is as simple as:
response = Unirest.post "http://httpbin.org/post",
headers:{ "Accept" => "application/json" },
parameters:{ :age => 23, :foo => "bar" } {|response|
response.code # Status code
response.headers # Response headers
response.body # Parsed body
response.raw_body # Unparsed body
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With