Sinatra流式传输和Eventmachine通道

5
使用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

我现在也在为同样的问题苦苦挣扎。 - JP Silvashy
@codefor5 我也遇到了类似的技术难题,你能否发布一下你所使用的解决方案? - hershey92
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
0

你可以使用条件。在你的情况下,你可以使用 Sinatra Readme 中提供的授权示例,并具有两个完全相同的路由,但拥有不同的授权。这样,如果第一个条件失败,它将检查第二个路由,然后应该可以流式传输。可能会有一种路由解决方案,但我还没有尝试过流式传输。


谢谢 - 我想我明白了。您能否通过发布修改后的代码来澄清一下? - codefor5
BTY - 我正在使用授权。有个人账户和这些账户的个人用户。我希望只在同一账户的用户之间流传信息。 - codefor5
我觉得我给出了错误的答案... 如果用户被授权,请查看条件下的Readme,只有一条路线 (https://github.com/sinatra/sinatra/blob/master/README.rdoc)。这应该可以解决问题。您可以根据自己的身份验证系统设置自己的条件。 - three
我不确定我表达清楚了。每个已登录的人都有一个开放的连接,它可以工作。我如何仅发送到该人的连接或特定一组人的连接,而不是所有具有连接的人? - codefor5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,