Sinatra流媒体应用程序+ em ::启动时定期计时器

时间:2011-12-30 16:18:05

标签: sinatra eventmachine

我需要使用Sinatra创建一个流媒体网络应用程序,当我打开多个连接时,我尝试使用单个“流媒体”流,这是最好的方法吗?

我几天之前无法测试,但我的主要想法是这样的:

set :server, :thin
connections = []

configure do
  EventMachine::PeriodicTimer.new(1) do
    connections.each { |out| out << "test" << "\n" }
  end
end

get '/' do
  stream(:keep_open) { |out| connections << out }
end

1 个答案:

答案 0 :(得分:2)

如果您无法使其正常工作:

require 'sinatra/base'

class MyApp < Sinatra::Base

  set :path, '/tmp'
  set :environment, 'production'

  def initialize
    @connections = []

    EM::next_tick do
      EM::add_periodic_timer(1) do
        @connections.each do |out|
          out << "test" << "</br>"
        end
      end
    end

  end

  get '/' do
    stream(:keep_open) do |out|
      @connections << out
    end
  end

end

run MyApp.new

我总是喜欢为sinatra应用程序使用适当的类,在这种情况下,它允许存储连接而不依赖于全局或伪全局变量。