Wie finde ich heraus, wer mit ActionCable verbunden ist?

8

Ich habe ActionCable.server.open_connections_statistics , ActionCable.server.connections.length , ActionCable.server.connections.map(&:statistics) , ActionCable.server.connections.select(&:beat).count und ähnliches gesehen, aber dies ist nur "pro Prozess" (Server, Konsole, Server-Arbeiter, usw.). Wie finde ich alle heraus, die zu diesem Zeitpunkt ActionCable abonniert haben? Dies sollte den gleichen Wert für jeden Rails-Prozess in jeder Umgebung (Entwicklung, Bereitstellung, Produktion) zurückgeben. So können Sie beispielsweise in der Entwicklungskonsole auch die Verbindungen auf dem Entwicklungsserver sehen, da sie theoretisch denselben Subskriptionsadapter verwenden (redis, async, postgres).

Rails 5.0.0.beta3, Ruby 2.3.0

Verwandte ActionCable - Wie wird die Anzahl der verbundenen Benutzer angezeigt?

    
b264 19.03.2016, 20:05
quelle

2 Antworten

13

Wenn Sie redis verwenden, können Sie alle Pubsub-Kanäle sehen.

%Vor%

Damit werden alle Websocket-Verbindungen für alle Puma-Mitarbeiter zusammen angezeigt. Und wenn Sie mehrere Server haben, werden diese wahrscheinlich auch hier angezeigt.

    
Razor 26.03.2016 01:00
quelle
3

Genauer gesagt für ActionCable (und für Redis) ...

Angenommen, dieser Kanal:

%Vor%

Holen Sie sich den Redis-Adapter von ActionCable, anstatt ihn selbst zu erstellen (Sie müssten andernfalls die URL von config/cable.yml eingeben):

%Vor%

Erhalte den Namen des Kanals einschließlich channel_prefix, den du angegeben hast in config/cable.yml :

%Vor%

Erhalte alle verbundenen Kanäle von RoomChannel :

%Vor%

Dekodieren Sie den Namen des Abonnements:

%Vor%

Wenn Sie ein Objekt ActiveRecord abonniert haben, sagen wir Room (mit stream_for ), Sie können die IDs extrahieren:

%Vor%     
Oded Niv 08.11.2017 13:19
quelle