2015-11-22 16 views
15

Ho un URL API che è un flusso di dati con il tipo di contenuto: text/event-stream.Rails come analizzare il testo/event-stream?

Come è possibile ascoltare lo streaming? Come iscriversi a ciascun evento per stampare i dati? Ho cercato di usare il rubino libary em-eventsource

Il mio file 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 

Quando visito il mio api url posso vedere i dati aggiornati ogni secondo. Ma quando eseguo il file rubino nel terminale non stampa alcun dato/messaggio.

risposta

4

impostare un timer per controllare source.ready_state, sembra che non si connette ad api per qualche ragione

EDIT: a quanto pare il problema è in https' SNI, che non è supportato dal rilascio eventmachine corrente, in modo su collegamento EventSource tenta di connettersi a host virtuale sulla macchina api di default, non quello l'API è accesa, quindi il CONNECTING stato

Provare a utilizzare eventmachine dal ramo principale, si afferma già di avere il supporto per SNI, che sta per essere rilasciato in 1.2.0:

gem 'eventmachine', github:'eventmachine/eventmachine' 
+0

'source.ready_state' restituisce 0 –

+0

' 0' è 'CONNECTING', questo significa che EventSource non è riuscita o non sono ancora collegati, per impostazione predefinita è riprovare dopo 3 secondi – Vasfed

+0

api URL è un http o https regolare? prova a visitarlo con 'curl -v' – Vasfed

3
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 

Ho usato la libreria http EventMachine.