Ruby Sinatra流媒体和Eventmachine频道

Ruby Sinatra流媒体和Eventmachine频道,ruby,sinatra,eventmachine,Ruby,Sinatra,Eventmachine,有了Sinatra流媒体,就可以指定哪些连接获得发送的信息。例如,仅限特定帐户上的用户 我相信这可以通过Eventmachine频道实现,但我不知道如何实现。任何建议或更好的示例代码都将不胜感激 下面是代码的相关部分。现在,正如您所看到的,它只发送到每个打开的连接 configure do set server: 'thin', connections: [] set :app_file, __FILE__ set :port, ENV['PORT'] set :

有了Sinatra流媒体,就可以指定哪些连接获得发送的信息。例如,仅限特定帐户上的用户

我相信这可以通过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
configure do
设置服务器:“精简”,连接:[]
设置:应用程序文件,应用程序文件__
集合:端口,环境['port']
set:public_文件夹,File.dirname(_文件)+'/public'
结束
获取“/stream”,提供“文本/事件流”do
溪流:请勿入内|

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

谢谢-我想我理解。你能通过张贴我的代码修改来澄清吗?顺便说一句,我正在使用授权。这些帐户有个人帐户和个人用户。我只想在同一帐户上的用户之间传输信息。我想我给出了错误的答案。。。如果用户获得授权(),请在条件下仅检查一条路由的自述文件()。您可以根据您的身份验证系统设置自己的条件。我不确定我是否清楚。每个登录的人都有一个打开的连接,它可以工作。我如何只发送给那个人的连接或一组特定的人的连接,而不是发送给每个有连接的人?我现在实际上正在努力解决同样的问题。@codefor5我面临着类似的技术挑战,你能发布你使用的解决方案吗。