2012-02-04 66 views
3

使用Sinatra Streaming可以指定哪些連接獲得發送信息。例如只有特定帳戶的用戶。Sinatra Streaming和Eventmachine Channels

我相信這可以使用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 
+0

我實際上正在爲同樣的事情而奮鬥。 – 2012-07-31 22:06:26

+0

@ codefor5我面臨着類似的技術挑戰,您可以發佈您使用的解決方案嗎? – hershey92 2014-03-06 07:45:48

回答

0

您可以使用條件。在您的情況下,您可以使用Sinatra自述文件中提供的授權示例,並擁有兩條完全相同的具有不同授權的路線。這樣,如果第一個條件失敗,它將檢查第二條路線,然後應該流。可能有一條路線解決方案,但尚未嘗試流式傳輸。

+0

謝謝 - 我想我明白了。你能否通過發佈我修改的代碼來澄清? – codefor5 2012-02-04 15:39:05

+0

BTY - 我正在使用授權。這些帳戶有個人帳戶和個人用戶。我只想在同一帳戶中的用戶之間傳輸信息。 – codefor5 2012-02-04 15:43:19

+0

我想我給了錯誤的答案...如果用戶被授權(https://github.com/sinatra/sinatra/blob/master/README.rdoc),請檢查條件下的自述文件,以查看是否只有一個路由。您可以根據您的身份驗證系統設置您自己的條件。 – three 2012-02-04 18:21:20