Rails beginner
Rails beginner

Reputation: 14504

Rails how to parse text/event-stream?

I have an API url that is a stream of data with the content type: text/event-stream.

How is it possible to listen to the stream? Like subsribe to each event to print the data? I have tried to use the ruby libary em-eventsource

My test.rb file:

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

When I visit my api url I can see the data updated each second. But when I run the ruby file in the terminal it does not print any data/messages.

Upvotes: 16

Views: 1294

Answers (2)

Vasfed
Vasfed

Reputation: 18474

Set a timer to check source.ready_state, it seems like it does not connect to api for some reason

EDIT: it seems your problem is in https' SNI, which is not supported by current eventmachine release, so upon connecting eventsource tries to connect to default virtual host on api machine, not the one the api is on, thus the CONNECTING state

Try using eventmachine from master branch, it already states to have support for SNI, that is going to be released in 1.2.0:

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

Upvotes: 4

Rails beginner
Rails beginner

Reputation: 14504

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

I used EventMachine http libary.

Upvotes: 3

Related Questions