Rails如何解析文本/事件流?

时间:2015-11-22 10:50:08

标签: ruby-on-rails ruby ruby-on-rails-4 eventmachine

我有一个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文件时,它不会打印任何数据/消息。

2 个答案:

答案 0 :(得分:4)

设置一个计时器以检查source.ready_state,似乎由于某种原因它没有连接到api

编辑:看来你的问题出现在https' SNI,当前eventmachine版本不支持,因此在连接eventsource时尝试连接到api机器上的默认虚拟主机,而不是api所在的那个,因此CONNECTING状态

尝试使用来自master分支的eventmachine,它已经声明支持SNI,它将在1.2.0中发布:

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

答案 1 :(得分: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

我使用了EventMachine http libary。