ruby ActionCable.server.broadcast无法广播

zysjyyx4  于 2023-04-05  发布在  Ruby
关注(0)|答案(1)|浏览(80)

我正在尝试将Rails应用程序从使用Pusher迁移到ActionCable。在服务器端代码中,这是ActionCable通道:

class PagesChannel < ApplicationCable::Channel
     def subscribed
        stream_from 'pages'
     end
     def speak(data)
        ActionCable.server.broadcast('pages',data)
     end
 end

在客户端,这是用户代码:

const app=ActionCable.createConsumer("wss://localhost.branch.co:3000/cable");
const channel =app.subscriptions.create("PagesChannel",{
    connected:()=>{
        console.log("connected")
    },
    received:()=>{
        console.log("got mail")
    }
})

在官方网站https://guides.rubyonrails.org/action_cable_overview.html中提到:
然后,在Rails应用程序的其他地方,您可以通过调用broadcast来广播到这样的房间:
我解释说,这意味着在我的rails应用程序中,我可以调用ActionCable.server.broadcast('pages',data),它将广播给所有订阅者。你可以只在Channel类中调用它吗?如果可以,你如何从服务器端调用Channel类的方法。我能够验证我的客户端频道订阅是否连接。我甚至可以调用
channel.perform("speak");
在我的JS代码从我的客户端,并有它广播到所有客户端。
我在上面的代码运行一个服务器,所有的配置,路由.rb路径都设置好了。运行服务器后,我通过bundle exec rails console使用rails控制台,输入ActionCable.server.broadcast("pages",{}),客户端没有收到消息,控制台没有显示错误。我的客户端在上面的代码运行。我已经确定这不是一个跨域错误。

ctehm74n

ctehm74n1#

在没有看到整个应用程序的情况下很难提供帮助,但是你应该可以从任何地方调用ActionCable.server.broadcast('pages',data)。我的猜测是,你没有正确配置redis,你应该验证一下。

相关问题