ActionCable - 如何显示已连接用户的数量?

pmi*_*hna 15 ruby-on-rails websocket actioncable

我正在尝试使用Action Cable创建一个简单的类似聊天的应用程序(计划扑克应用程序).我对术语,文件层次结构以及回调的工作方式感到有些困惑.

这是创建用户会话的操作:

class SessionsController < ApplicationController
  def create
    cookies.signed[:username] = params[:session][:username]
    redirect_to votes_path
  end
end
Run Code Online (Sandbox Code Playgroud)

然后,用户可以发布应该向所有人广播的投票:

class VotesController < ApplicationController
  def create
    ActionCable.server.broadcast 'poker',
                                 vote: params[:vote][:body],
                                 username: cookies.signed[:username]
    head :ok
  end
end
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很清楚,并且工作正常.问题是 - 如何显示已连接用户的数量?当用户(消费者?)连接时,JS中是否会触发回调?我想要的是当我在隐身模式下在3个不同浏览器中打开3个标签时,我想显示"3".当新用户连接时,我希望该数字递增.如果任何用户断开连接,则该号码应减少.

我的PokerChannel:

class PokerChannel < ApplicationCable::Channel
  def subscribed
    stream_from 'poker'
  end
end
Run Code Online (Sandbox Code Playgroud)

app/assets/javascripts/poker.coffee:

App.poker = App.cable.subscriptions.create 'PokerChannel',

  received: (data) ->
    $('#votes').append @renderMessage(data)

  renderMessage: (data) ->
    "<p><b>[#{data.username}]:</b> #{data.vote}</p>"
Run Code Online (Sandbox Code Playgroud)

pmi*_*hna 16

似乎只有一种方法可以使用

ActionCable.server.connections.length
Run Code Online (Sandbox Code Playgroud)

(参见评论中的警告)

  • 请注意,这是*特定线程*的当前连接数,而不是各种进程和线程上的连接数 (4认同)
  • 它也是与服务器的连接数,而不是特定通道的连接数。 (3认同)