如何在我的rails应用程序中运行服务器端faye客户端?

时间:2016-05-12 16:28:58

标签: ruby-on-rails ruby ruby-on-rails-4 websocket faye

所以我试图用rails和faye构建一个聊天应用程序。并且希望在rails应用程序内部运行服务器端faye客户端,以便处理用户客户端退出浏览器的断开连接事件。这样我就可以在rails应用程序中调用控制器动作来从数据库中删除一些数据。我能够使用我的faye rack应用程序检测用户ID,但需要一种方法将数据进一步发送到rails。

因此,如果您知道如何做到这一点,请提供帮助,或者对如何实现此目标提出任何其他建议。我考虑过的另一个选择是直接从faye发送帖子请求,但是我需要一些方法来进行csrf保护。但我更喜欢服务器端客户端,它可以订阅一个faye频道。

1 个答案:

答案 0 :(得分:2)

I have solved this now by using the 'faye-rails' gem and included this into my application.rb file:

config.middleware.delete Rack::Lock
config.middleware.use FayeRails::Middleware, mount: '/faye', :timeout => 25 do
    class RealTime < FayeRails::Controller 
        channel '**' do
            monitor :unsubscribe do
                if channel != '/messages' && channel != '/disconnect'
                    user = channel[6..-1]
                    @members = Members.where("username = '#{user}'")
                    data = {:channels => @members, :user => user}
                    RealTime.publish('/disconnect', data)

                    @members.destroy_all
                end
            end
        end
    end
    add_extension(RealTime.new)    
end

I also have a own channel for each user which I use to get the username and delete data from the database.