Module: ActionCable::Server::Connections

Included in:
Base
Defined in:
actioncable/lib/action_cable/server/connections.rb

Overview

Класс Collection используется для всех соединений, которые были установлены для этого конкретного сервера. Помните, что обычно вы будете запускать множество серверов Action Cable, поэтому вы не можете использовать эту коллекцию в качестве полного списка всех соединений, установленных против вашего приложения. Вместо этого используйте для этого RemoteConnections.

Constant Summary collapse

BEAT_INTERVAL =
3

Instance Method Summary collapse

Instance Method Details

#add_connection(connection) ⇒ Object


12
13
14
# File 'actioncable/lib/action_cable/server/connections.rb', line 12

def add_connection(connection)
  connections << connection
end

#connectionsObject


8
9
10
# File 'actioncable/lib/action_cable/server/connections.rb', line 8

def connections
  @connections ||= []
end

#open_connections_statisticsObject


29
30
31
# File 'actioncable/lib/action_cable/server/connections.rb', line 29

def open_connections_statistics
  connections.map(&:statistics)
end

#remove_connection(connection) ⇒ Object


16
17
18
# File 'actioncable/lib/action_cable/server/connections.rb', line 16

def remove_connection(connection)
  connections.delete connection
end

#setup_heartbeat_timerObject

Реализации соединения WebSocket различаются, когда они отмечают соединение как устаревшее. Мы в принципе никогда не хотим, чтобы соединение устарело, поскольку вы не можете полагаться на возможность коммуникации с соединением. Чтобы решить эту проблему, 3-секундное heartbeat сообщение выполняется во всех соединениях. Если beat не срабатывает, мы автоматически отключаемся.


23
24
25
26
27
# File 'actioncable/lib/action_cable/server/connections.rb', line 23

def setup_heartbeat_timer
  @heartbeat_timer ||= event_loop.timer(BEAT_INTERVAL) do
    event_loop.post { connections.map(&:beat) }
  end
end