我试图用Action Cable创建一个简单的聊天应用程序(规划扑克应用程序).我有点混淆了术语,文件层次结构以及回调的工作原理.
这是创建用户会话的操作:
class SessionsController < ApplicationController def create cookies.signed[:username] = params[:session][:username] redirect_to votes_path end end
然后,用户可以发布应该向所有人广播的投票:
class VotesController < ApplicationController def create ActionCable.server.broadcast 'poker',vote: params[:vote][:body],username: cookies.signed[:username] head :ok end end
到目前为止,一切都对我来说很清楚,工作正常.问题是 – 如何显示已连接用户的数量?当用户(消费者?)连接时,JS中是否有回调?我想要的是当我在无痕模式下在3种不同浏览器中打开3个标签时,我想显示“3”.当新用户连接时,我想要增加数字.如果任何用户断开连接,则数字应该递减.
我的扑克频道:
class PokerChannel < ApplicationCable::Channel def subscribed stream_from 'poker' end end
应用程序/资产/ Java脚本/ 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>"
解决方法
似乎有一种方法是使用
ActionCable.server.connections.length