2016-09-29 76 views
0

https://stackoverflow.com/a/36230416/5381547獲取所有已註冊的連接

https://stackoverflow.com/a/32945949/5381547

這些問題的答案不幫我的列表。

我想獲得所有註冊連接到我的ActionCable列表。我試圖

Redis.new.pubsub("channels", "action_cable/*")

ActionCable.server.connections.length

,但他們都返回[]。所以現在我正在使用類似於

def connect 
    self.uuid = SecureRandom.uuid 

    players_online = REDIS.get('players_online') || 0 
    players_online = players_online.to_i 
    players_online += 1 
    REDIS.set('players_online', players_online) 
end 

def disconnect 
    players_online = REDIS.get('players_online').to_i 
    players_online -= 1 
    REDIS.set('players_online', players_online) 
end 

但我知道這是一個完全非Rails方式。有沒有可能獲得所有註冊連接的列表?

回答

2

我終於找到了解決方案。

def connect 
    self.uuid = SecureRandom.uuid 
    transmit({'title': 'players_online', 'message': ActionCable.server.connections.size + 1}) 
    ActionCable.server.connections.each do |connection| 
    connection.transmit({'title': 'players_online', 'message': ActionCable.server.connections.size + 1}) 
    end 
end 

def disconnect 
    transmit({'title': 'players_online', 'message': ActionCable.server.connections.size}) 
    ActionCable.server.connections.each do |connection| 
    connection.transmit({'title': 'players_online', 'message': ActionCable.server.connections.size}) 
    end 
end 

ActionCable.server.connections得到所有服務器連接的列表,除了這是目前連接到插座中的一個。這就是爲什麼你需要直接向他傳送消息ActionCable.server.connections.size + 1

+1

請注意,ActionCable.server.connections不在不同的進程之間共享 – fabriciofreitag

相關問題