Каналы Sinatra Streaming и Eventmachine - PullRequest
5 голосов
/ 04 февраля 2012

С Sinatra Streaming есть способ указать, какие соединения получают отправленную информацию. Например, только пользователи с определенной учетной записью.

Я верю, что это можно сделать с помощью Eventmachine Channels, но я не знаю как. Любой совет или даже лучший образец кода будет принят.

Ниже приведена соответствующая часть кода. Прямо сейчас, как вы можете видеть, он просто отправляет каждое открытое соединение.

configure do
    set server: 'thin', connections: []
    set :app_file, __FILE__
    set :port, ENV['PORT']
    set :public_folder, File.dirname(__FILE__) + '/public'
end

get '/stream', provides: 'text/event-stream' do
    stream :keep_open do |out|
        settings.connections << out
        out.callback { settings.connections.delete(out) }
    end
end

post '/update/contact/:id' do
    @contact = Contact.get(params[:id])
    @contact.update(params[:contact])
    settings.connections.each { |out| out << "data: #{@contact.account_id} Contact #{@contact.id} #{@contact.first_name} #{@contact.last_name}\n\n" }
    204
end

1 Ответ

0 голосов
/ 04 февраля 2012

Вы можете использовать условия. В вашем случае вы можете использовать пример авторизации, предоставленный в Sinatra Readme, и иметь два абсолютно одинаковых маршрута с разными авторизациями. Таким образом, если первое условие не выполняется, он проверяет второй маршрут и затем должен выполнить потоковую передачу. Возможно, существует единственное решение, но пока не экспериментировал с потоковой передачей.

...