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

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

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

因此,如果您知道如何执行此操作,或者对我如何完成此操作有任何其他建议,请提供帮助。我考虑过的第二个选择是直接从 faye 发送 post 请求,但是我需要一些方法来进行 csrf 保护。但我更喜欢可以订阅 faye channel 的服务器端客户端。

最佳答案

我现在已经通过使用 'faye-rails' gem 解决了这个问题,并将其包含到我的 application.rb 文件中:

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

我还为每个用户提供了一个自己的 channel ,用于获取用户名并从数据库中删除数据。

关于ruby-on-rails - 如何让服务器端 faye 客户端在我的 Rails 应用程序中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37192601/

相关文章:

ruby-on-rails - 访问关联 FixtureSet 中 Rails 测试 fixture 的属性

ruby-on-rails - 如果键与 rails 匹配,则从散列中删除值

ruby-on-rails - Rspec:ActionMailer::Base.deliveries 总是空的

ruby-on-rails - 如何在 capistrano 部署中管理捆绑的 gems?

ruby - 访问类外的常量

ruby-on-rails-4 - 运行 rspec 时未初始化的常量 FactoryGirl,但在控制台中工作

mysql - 如何使用默认数据库进行用户登录,但在登录后使用另一个带有rails的数据库

ruby-on-rails - 安装 libyaml Cygwin

ruby-on-rails - Rspec - 测试环境的额外配置在哪里?

ruby-on-rails - 为表单制作和使用临时属性