Фэй: большая задержка в HTTP-запросе

У меня есть этот код в сценарии загрузки Faye:

faye_server = Faye::RackAdapter.new(:mount => '/faye', :timeout => 45)
faye_server.add_extension(ServerAuth.new)

server_uri = URI.parse(BacklinkHealth::FAYE_SERVER)

faye_server.on(:subscribe) do |client_id, channel|
  puts "subscribed #{channel}"
  if channel.starts_with?('/pagination')    
    website_id = channel.split('/')[2]
    page = channel.split('/')[3]
    app = ActionDispatch::Integration::Session.new(Rails.application)
    app.get app.pagination_website_backlinks_path(website_id, :page => page)    
    message = {:channel => channel, :data => app.response.body, :ext => {:auth_token => BacklinkHealth::FAYE_TOKEN}}        
    puts 'started HTTP post'
    Net::HTTP.post_form(server_uri, :message => message.to_json)
    puts 'finished HTTP post'
  end
end

Проблема в том, что выполнение приходит к "запущенному HTTP-сообщению", а затем требуется больше минуты, чтобы сообщение было зарегистрировано в javascript на стороне клиента. Сообщение «завершенное сообщение HTTP» никогда не печатается :( Я не понимаю, что происходит.

Если я попытаюсь выполнить идентичную HTTP-запись из консоли Rails, она будет выполнена мгновенно, хотя один или два раза случалось, что это занимало минуту.

Есть идеи?


person davidhq    schedule 16.11.2013    source источник


Ответы (1)


Гораздо лучше использовать это:

require 'eventmachine'

EM.run {
    client = Faye::Client.new(BacklinkHealth::FAYE_SERVER)
    client.publish(channel, 'pagination' => pagination)
}

чем HTTP-запросы... Я не смог заставить это работать с аутентификацией (пока), но я это сделаю.

person davidhq    schedule 17.11.2013