Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rails-Sinatra实时通知_Javascript_Ruby On Rails_Notifications_Sinatra - Fatal编程技术网

Javascript Rails-Sinatra实时通知

Javascript Rails-Sinatra实时通知,javascript,ruby-on-rails,notifications,sinatra,Javascript,Ruby On Rails,Notifications,Sinatra,我正在尝试构建一个实时通知模块,该模块的功能与facebook的实时通知类似,例如,如果一个用户请求与另一个用户建立友谊,则推送通知将发送到第二个用户,其中我有以下限制: 1-通知发送到特定用户的所有浏览器实例 2-用户需要登录才能订阅通知 3-由于性能问题,不使用池 4-它显然需要安全 我做了一个快速的研究,发现我可以选择web套接字或服务器发送的事件。服务器发送的事件处理自动重新连接,非常适合我需要的功能,所以我决定使用它 我构建了一个sinatra事件驱动服务器,每当一个用户请求另一个用户

我正在尝试构建一个实时通知模块,该模块的功能与facebook的实时通知类似,例如,如果一个用户请求与另一个用户建立友谊,则推送通知将发送到第二个用户,其中我有以下限制: 1-通知发送到特定用户的所有浏览器实例 2-用户需要登录才能订阅通知 3-由于性能问题,不使用池 4-它显然需要安全

我做了一个快速的研究,发现我可以选择web套接字或服务器发送的事件。服务器发送的事件处理自动重新连接,非常适合我需要的功能,所以我决定使用它

我构建了一个sinatra事件驱动服务器,每当一个用户请求另一个用户的友谊时,通知应该通过它推送到第二个用户,但似乎有几个问题,我的解决方案让我确信我走错了方向

如何将eventsource绑定到特定用户,同时维护安全性。当且仅当用户登录时,创建eventsource的正确方法是什么


我还需要一些通用的有用指南来完成这项任务

通常你不需要“精确实时”,你可以使用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,行动电缆是建立在它之上