Gly*_*yph 5 ruby-on-rails-5 actioncable
对于我正在构建的应用程序,我有一个“大厅”页面,人们可以在其中配置他们想要加入的区域。非常基本。
我希望有当前订阅该页面频道的活跃消费者总数,以便用户知道周围是否有其他人可以与之交互。
是否有捷径可寻?
我定义了一个辅助方法:
应用程序/频道/application_cable/channel.rb
module ApplicationCable
class Channel < ActionCable::Channel::Base
def connections_info
connections_array = []
connection.server.connections.each do |conn|
conn_hash = {}
conn_hash[:current_user] = conn.current_user
conn_hash[:subscriptions_identifiers] = conn.subscriptions.identifiers.map {|k| JSON.parse k}
connections_array << conn_hash
end
connections_array
end
end
end
Run Code Online (Sandbox Code Playgroud)
现在您可以connections_info在派生通道内的任何位置进行呼叫。current_user该方法返回有关所有可用服务器套接字连接、它们各自的s 以及所有当前订阅的信息数据数组。
这是我的数据返回的示例connections_info:
[1] pry(#<ChatChannel>)> connections_info
=> [{:current_user=>"D8pg2frw5db9PyHzE6Aj8LRf",
:subscriptions_identifiers=>
[{"channel"=>"ChatChannel",
"secret_chat_token"=>"f5a6722dfe04fc883b59922bc99aef4b5ac266af"},
{"channel"=>"AppearanceChannel"}]},
{:current_user=>
#<User id: 2, email: "client1@example.com", created_at: "2017-03-27 13:22:14", updated_at: "2017-04-28 11:13:37", provider: "email", uid: "client1@example.com", first_name: "John", active: nil, last_name: nil, middle_name: nil, email_public: nil, phone: nil, experience: nil, qualification: nil, price: nil, university: nil, faculty: nil, dob_issue: nil, work: nil, staff: nil, dob: nil, balance: nil, online: true>,
:subscriptions_identifiers=>
[{"channel"=>"ChatChannel",
"secret_chat_token"=>"f5a6722dfe04fc883b59922bc99aef4b5ac266af"}]}]
Run Code Online (Sandbox Code Playgroud)
然后,您可以按照您想要的方式解析该结构并提取所需的数据。你可以通过相同的方式区分这个列表中你自己的连接current_user(current_user方法在里面class Channel < ActionCable::Channel::Base)。
如果用户连接两次(或更多次),则相应的数组元素就会加倍。
| 归档时间: |
|
| 查看次数: |
2753 次 |
| 最近记录: |