Потоковое приложение Sinatra + em :: периодический таймер при запуске - PullRequest
1 голос
/ 30 декабря 2011

Мне нужно создать потоковое веб-приложение с помощью 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 Ответ

2 голосов
/ 31 января 2012

Если вам не удалось заставить его работать:

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, в этом случае он позволяет хранить соединения, не полагаясь на глобальные или псевдоглобальные переменные.

...