websocket 为什么Rails ActionCable无需安装即可使用

gcuhipw9  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(114)

我想在我的rails 6应用程序中使用action cable和ruby_graphql gem。我注意到当我简单地加上
require "action_cable/engine"到我的应用程序.rb和Connection < ActionCable::Connection::BaseChannel < ActionCable::Channel::Base等所需的代码
WebSocket在/cable下可用,即使我没有添加mount ActionCable.server => '/cable'
我不明白为什么/cable路由会在没有挂载到路由文件中的情况下变得可用。我还注意到,我的应用程序的资源消耗(特别是CPU)随着简单的`require“action_cable/engine”而增加。我本以为只有在我骑上它的时候才会发生这种情况
任何帮助和洞察这将不胜感激
(我确保在更改之间重新启动所有服务器,并检查生成的路由,以查看是否不包括/cable-然后我在开发和生产中使用新的WebSocket('wss://my-domain.test/cable')测试了websocket,两次都成功升级到websocket,状态代码为101)

ha5z0ras

ha5z0ras1#

看看你正在require-ing的文件:action_cable/engine
更具体地说,下面的代码部分

initializer "action_cable.routes" do
      config.after_initialize do |app|
        config = app.config
        unless config.action_cable.mount_path.nil?
          app.routes.prepend do
            mount ActionCable.server => config.action_cable.mount_path, internal: true, anchor: true
          end
        end
      end
    end

字符串
仅仅需要引擎的操作就创建了一个初始化器,该初始化器将路由添加到应用程序路由的顶部。
几行之后,它也启动了服务器

ActiveSupport.on_load(:action_cable) do
        app.reloader.before_class_unload do
          ActionCable.server.restart
        end
      end


这就是为什么路由在那里,action_cable似乎只是开箱即用,即使没有显式启动任何东西。它只发生在require "action_cable/engine"内部

相关问题