Sinatra 流媒体和 Eventmachine 频道
Posted
技术标签:
【中文标题】Sinatra 流媒体和 Eventmachine 频道【英文标题】:Sinatra Streaming and Eventmachine Channels 【发布时间】:2012-02-26 20:20:13 【问题描述】:使用 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
【问题讨论】:
我现在确实在为同样的事情苦苦挣扎。 @codefor5 我面临着类似的技术挑战,您能否发布您使用的解决方案。 【参考方案1】:您可以使用条件。在您的情况下,您可以使用 Sinatra 自述文件中提供的授权示例,并拥有两个完全相同的具有不同授权的路由。这样,如果第一个条件失败,它将检查第二个路由,然后应该流式传输。可能有一种单路解决方案,但尚未尝试过流式传输。
【讨论】:
谢谢 - 我想我明白了。你能通过发布我修改过的代码来澄清一下吗? BTY - 我正在使用授权。这些帐户有个人帐户和个人用户。我只想在同一帐户的用户之间传输信息。 我想我给出了错误的答案...如果用户被授权,请检查条件下的自述文件以获取一条路线 (github.com/sinatra/sinatra/blob/master/README.rdoc) 那应该可以。您可以根据自己的身份验证系统设置自己的条件。 我不确定我是否清楚。每个登录的人都有一个开放的连接,并且可以正常工作。如何仅发送给该人的联系人或特定人群的联系人,而不是发送给所有有联系人的人?以上是关于Sinatra 流媒体和 Eventmachine 频道的主要内容,如果未能解决你的问题,请参考以下文章
使用 EventMachine 和 RabbitMQ 的 RPC
EventMachine 和 em-websocket - 从队列中读取并推送到通道
无法在 Rails 控制台中加载 Ruby EventMachine - 没有要加载的文件