2015-11-22 13 views
15

Tôi có url API là luồng dữ liệu có loại nội dung: text/event-stream.Đường ray cách phân tích cú pháp văn bản/luồng sự kiện?

Làm cách nào để nghe luồng? Giống như subsribe cho mỗi sự kiện để in dữ liệu? Tôi đã cố gắng sử dụng ruby ​​THƯ VIỆN em-eventsource

tập tin test.rb của tôi:

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 

Khi tôi ghé thăm url api của tôi, tôi có thể xem dữ liệu được cập nhật mỗi giây. Nhưng khi tôi chạy tập tin ruby ​​trong thiết bị đầu cuối nó không in bất kỳ dữ liệu/tin nhắn.

Trả lời

4

Thiết lập một bộ đếm thời gian để kiểm tra source.ready_state, nó có vẻ như nó không kết nối với api vì một lý do

EDIT: có vẻ như vấn đề của bạn là ở https' SNI, mà không được hỗ trợ bởi phát hành eventmachine hiện tại, vì vậy khi kết nối các sự kiện cố gắng kết nối với máy chủ ảo mặc định trên máy api, không phải là api đang bật, do đó, trạng thái CONNECTING

Hãy thử sử dụng eventmachine từ nhánh chính, nó đã có trạng thái hỗ trợ SNI, phát hành trong phiên bản 1.2.0:

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

'source.ready_state' trả về 0 –

+0

' 0' là 'CONNECTING', điều này có nghĩa là nguồn sự kiện không thành công hoặc chưa được kết nối, theo mặc định nó sẽ thử lại sau 3 giây – Vasfed

+0

Có phải url api là http hoặc https thông thường không? thử truy cập nó bằng '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 

Tôi đã sử dụng thư viện http EventMachine.

Các vấn đề liên quan