Rails, как разобрать текст/поток событий?

У меня есть URL-адрес API, который представляет собой поток данных с типом контента: text/event-stream.

Как можно прослушивать поток? Как подписка на каждое событие для печати данных? Я попытался использовать ruby ​​libary em-eventsource

Мой test.rb файл:

require "em-eventsource"
EM.run do
  source = EventMachine::EventSource.new("my_api_url_goes_here")
  source.message do |message|
    puts "new message #{message}"
  end
  source.start 
end

Когда я посещаю свой api url, я могу видеть данные, обновляемые каждую секунду. Но когда я запускаю файл ruby ​​в терминале, он не печатает никаких данных/сообщений.

Ответы

Ответ 1

Установите таймер для проверки source.ready_state, похоже, что он не подключается к api по какой-либо причине

EDIT: кажется, ваша проблема связана с SNI https, который не поддерживается текущей версией eventmachine, поэтому при подключении eventource пытается подключиться к виртуальному хосту по умолчанию на машине api, а не к апи, включенному, таким образом, t21 > состояние

Попробуйте использовать eventmachine из главной ветки, он уже заявляет, что имеет поддержку SNI, который будет выпущен в версии 1.2.0:

gem 'eventmachine', github:'eventmachine/eventmachine'

Ответ 2

require 'eventmachine'
require 'em-http'
require 'json'

http = EM::HttpRequest.new("api_url", :keepalive => true, :connect_timeout => 0, :inactivity_timeout => 0)

EventMachine.run do

  s = http.get({'accept' => 'application/json'})
  s.stream do |data|
    puts data
  end

end

Я использовал EventMachine http libary.