Spec-Zone.ru › Ruby on Rails 8.1

class ActionCable::Server::Base

Родительский класс:
Object
Подключённые модули:
ActionCable::Server::Broadcasting

Action Cable Base

Экземпляр-одиночка ActionCable::Server доступен через ActionCable.server. Он используется процессом Rack, запускающим сервер Action Cable, а также пользователями для доступа к объекту RemoteConnections, который служит для поиска и отключения соединений на всех серверах.

Кроме того, этот экземпляр сервера используется для широковещательной передачи. Дополнительную информацию см. в разделе Broadcasting.

Атрибуты

config [R]
mutex [R]

Публичные методы класса

logger () Показать исходный код
# File actioncable/lib/action_cable/server/base.rb, line 26
def self.logger; config.logger; end
new (config: self.class.config) Показать исходный код
# File actioncable/lib/action_cable/server/base.rb, line 31
def initialize(config: self.class.config)
  @config = config
  @mutex = Monitor.new
  @remote_connections = @event_loop = @worker_pool = @pubsub = nil
end

Публичные методы экземпляра

call (env) Показать исходный код
# File actioncable/lib/action_cable/server/base.rb, line 38
def call(env)
  return config.health_check_application.call(env) if env["PATH_INFO"] == config.health_check_path
  setup_heartbeat_timer
  config.connection_class.call.new(self, env).process
end

Вызывается Rack для настройки сервера.

connection_identifiers () Показать исходный код
# File actioncable/lib/action_cable/server/base.rb, line 102
def connection_identifiers
  config.connection_class.call.identifiers
end

Все идентификаторы, назначенные классу соединения, связанному с этим сервером.

disconnect (identifiers) Показать исходный код
# File actioncable/lib/action_cable/server/base.rb, line 46
def disconnect(identifiers)
  remote_connections.where(identifiers).disconnect
end

Отключает все соединения, определённые с помощью identifiers на этом или любом другом сервере посредством RemoteConnections.

event_loop () Показать исходный код
# File actioncable/lib/action_cable/server/base.rb, line 71
def event_loop
  @event_loop || @mutex.synchronize { @event_loop ||= ActionCable::Connection::StreamEventLoop.new }
end
pubsub () Показать исходный код
# File actioncable/lib/action_cable/server/base.rb, line 96
def pubsub
  @pubsub || @mutex.synchronize { @pubsub ||= config.pubsub_adapter.new(self) }
end

Адаптер, используемый для всех потоков и широковещательной передачи.

remote_connections () Показать исходный код
# File actioncable/lib/action_cable/server/base.rb, line 67
def remote_connections
  @remote_connections || @mutex.synchronize { @remote_connections ||= RemoteConnections.new(self) }
end

Точка доступа к RemoteConnections. Подробности см. в описании этого класса.

restart () Показать исходный код
# File actioncable/lib/action_cable/server/base.rb, line 50
def restart
  connections.each do |connection|
    connection.close(reason: ActionCable::INTERNAL[:disconnect_reasons][:server_restart])
  end

  @mutex.synchronize do
    # Shutdown the worker pool
    @worker_pool.halt if @worker_pool
    @worker_pool = nil

    # Shutdown the pub/sub adapter
    @pubsub.shutdown if @pubsub
    @pubsub = nil
  end
end
worker_pool () Показать исходный код
# File actioncable/lib/action_cable/server/base.rb, line 91
def worker_pool
  @worker_pool || @mutex.synchronize { @worker_pool ||= ActionCable::Server::Worker.new(max_size: config.worker_pool_size) }
end

Пул рабочих потоков используется для выполнения обратных вызовов соединений и действий каналов. Мы стараемся выполнять как можно меньше операций в основном потоке сервера. Пул рабочих потоков — это служба-исполнитель, работающая на основе пула потоков, обрабатывающих задачи из очереди. По умолчанию размер пула ограничен четырьмя рабочими потоками. Настройте размер самостоятельно с помощью config.action_cable.worker_pool_size.

При использовании Active Record, Redis и других инструментов в действиях каналов каждый поток пула рабочих потоков получает отдельное соединение. Планируйте развёртывание соответствующим образом: 5 серверов, на каждом из которых запущено по 5 рабочих процессов Puma, каждый с пулом из 8 рабочих потоков, — это как минимум 200 соединений с базой данных.

Кроме того, размер пула соединений с базой данных должен быть не меньше размера пула рабочих потоков. В противном случае рабочие потоки могут превысить доступное количество соединений с базой данных и заблокироваться в ожидании освобождения соединений другими потоками. В таком случае используйте пул рабочих потоков меньшего размера или увеличьте размер пула соединений с базой данных.

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API