Javascript Rails-Sinatra实时通知
我正在尝试构建一个实时通知模块,该模块的功能与facebook的实时通知类似,例如,如果一个用户请求与另一个用户建立友谊,则推送通知将发送到第二个用户,其中我有以下限制: 1-通知发送到特定用户的所有浏览器实例 2-用户需要登录才能订阅通知 3-由于性能问题,不使用池 4-它显然需要安全 我做了一个快速的研究,发现我可以选择web套接字或服务器发送的事件。服务器发送的事件处理自动重新连接,非常适合我需要的功能,所以我决定使用它 我构建了一个sinatra事件驱动服务器,每当一个用户请求另一个用户的友谊时,通知应该通过它推送到第二个用户,但似乎有几个问题,我的解决方案让我确信我走错了方向 如何将eventsource绑定到特定用户,同时维护安全性。当且仅当用户登录时,创建eventsource的正确方法是什么Javascript Rails-Sinatra实时通知,javascript,ruby-on-rails,notifications,sinatra,Javascript,Ruby On Rails,Notifications,Sinatra,我正在尝试构建一个实时通知模块,该模块的功能与facebook的实时通知类似,例如,如果一个用户请求与另一个用户建立友谊,则推送通知将发送到第二个用户,其中我有以下限制: 1-通知发送到特定用户的所有浏览器实例 2-用户需要登录才能订阅通知 3-由于性能问题,不使用池 4-它显然需要安全 我做了一个快速的研究,发现我可以选择web套接字或服务器发送的事件。服务器发送的事件处理自动重新连接,非常适合我需要的功能,所以我决定使用它 我构建了一个sinatra事件驱动服务器,每当一个用户请求另一个用户
我还需要一些通用的有用指南来完成这项任务通常你不需要“精确实时”,你可以使用setTimeout(simulate_realtime,5000);每5秒检查服务器上是否有新数据
您还可以在Rails 5中进行检查,Rails 5将在今年秋天发布一个稳定版本。您可以打赌,它是将添加到rails的下一个主要组件。您可能需要eventmachine()。查看聊天示例我使用服务器发送的事件进行自动重新连接,并使用http,无需特殊协议。此外,我认为我不需要双向全双工连接,毕竟这不是聊天应用程序,所以我做了以下工作: sinatra服务器侦听连接,并将接收到的特定连接与创建连接的用户id相关联,因此我可以根据用户id聚合连接,然后打开一些我试图处理的漏洞,稍后将讨论这些漏洞
get '/connect/:user_id', provides: 'text/event-stream' do
headers 'Access-Control-Allow-Origin' => "#{domainname.whatever.com}"
stream :keep_open do |connection|
connections << {'connection': connection, 'user_id': params[:user_id]}
connection.callback {
connections.select {|out| out[:connection]==connection} do |e| connections.delete e end
}
end
end
get'/connect/:user_id',提供:“文本/事件流”do
标题“访问控制允许来源”=>“#{domainname.whatever.com}”
流:保持打开do连接|
这不是我想要的。。我需要一个持久的连接,服务器将发送数据到客户端,每当有一个通知我认为你应该使用WebSocket,行动电缆是建立在它之上