2012-02-04 14 views
3

Sinatra Streamingには、どのコネクションに情報が送られるかを指定する方法があります。たとえば、特定のアカウントのユーザーのみ。Sinatra Streaming and Eventmachine Channels

私はこれが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 
+0

私は実際に同じことで今は苦労しています。 –

+0

@ codefor5私は同様の技術的課題に直面しています。使用したソリューションを投稿できますか? – hershey92

答えて

0

条件を使用できます。あなたのケースでは、Sinatra Readmeで提供されている認可の例を使用し、異なる権限で2つの全く同じルートを持つことができます。このようにして、最初の条件が失敗した場合は、2番目のルートを確認してストリーミングする必要があります。 1つのルートソリューションがあるかもしれませんが、まだストリーミングを試していません。

+0

ありがとうございます - 私は理解していると思います。自分のコードを変更して投稿することで明確にできますか? – codefor5

+0

BTY - 私は認可を使用しています。これらのアカウントには個別アカウントと個別ユーザーがあります。同じアカウントのユーザー間でのみ情報をストリーミングしたい – codefor5

+0

私は間違った答えを与えたと思います...ユーザが許可されている場合は、ただ1つのルートの条件でReadmeを確認してください(https://github.com/sinatra/sinatra/blob/master/README.rdoc)。あなたの認証システムに基づいて独自の条件を設定することができます。 – three