Sinatra Streaming和Eventmachine频道

时间:2012-02-04 15:07:09

标签: ruby sinatra eventmachine

使用Sinatra Streaming可以指定哪些连接获取发送信息。例如,仅限特定帐户的用户。

我相信这可以使用Eventmachine频道完成,但我不知道如何。任何建议或更好的示例代码将不胜感激。

以下是代码的相关部分。现在,你可以看到它只是发送到每个打开的连接。

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 :(得分:0)

您可以使用条件。在您的情况下,您可以使用Sinatra自述文件中提供的授权示例,并具有两个具有不同授权的完全相同的路由。这样,如果第一个条件失败,它将检查第二个路径,然后应该流。可能有一个单一路线的解决方案,但还没有尝试过流媒体。