С 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