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.