ruby-on-rails ruby ruby-on-rails-3 http mixpanel

ruby on rails - solicitud http asincrónica en ruby



ruby-on-rails ruby-on-rails-3 (3)

Aquí hay un gran artículo que cubre el tema.

En general, las alternativas viables para usar hilos para esto serían el uso de una Fibers o podría usar em-http-request . En el último ejemplo, podría dejar de lado el manejo de devolución de llamada para su propósito particular.

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

Esto funcionará como código de procedimiento. Solo quiero conectarme a un servidor, sin problemas sobre el pedido. ¿Cómo puedo hacer eso en ruby? Una opción es usar hilos.

Aquí hay un ejemplo usando hilos.

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

¿Alguna mejor solución?

PD: - Quiero presionar Mixpanel, entonces es por eso que solo quiero hacer una llamada http y no esperar la respuesta.


El manejo Async liviano es el trabajo de Threads (como dijiste) o Fibers .

De lo contrario, debería considerar EventMachine que es una herramienta muy poderosa.


Si solo se trata de solicitudes HTTP simples en estilo asíncrono, probablemente Unirest sea ​​la mejor Unirest para lograrlo.

La solicitud de Asnc es tan simple como:

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 }