Laravel 广播

Laravel Broadcasting

我的场景

我试图让 laravel 在不使用 laravel echo 的情况下与 pusher 一起工作,一切都在 public 频道上工作,但是当我切换到私人频道时 broadcastOn() 我在前端的事件推送器的方法不再接收任何东西。它作为私人频道记录在我的推送器应用程序事件日志中,但前端的推送器只是说没有。

我已经为这样的频道代码设置并返回 true:

Broadcast::channel('application', function ($post, $username) {
    if(true){
        return true;
    }
});

这是我的活动代码:

public function broadcastOn()
{
    return new PrivateChannel('application');
}

class 实现了 ShouldBroadcast,最后是我的前端代码:

 <script>
    //instantiate a Pusher object with our Credential's key
    var pusher = new Pusher('MY_KEY', {
        cluster: 'en',
        encrypted: true
    });

    //Subscribe to the channel we specified in our Laravel Event
    var channel = pusher.subscribe('application');

    //Bind a function to a Event (the full Laravel class)
    channel.bind('App\Events\PostMessage', function(){
        console.log('Event Logged');
    });
</script>

我的问题

为什么我的推送器前端代码检测不到我的私人广播?

嘿嘿嘿我想我找到了: https://pusher.com/docs/client_api_guide/client_private_channels

您需要在频道名称前加上'private-'前缀。 Echo 自动为您做的事情之一!

剩下的供参考。最后的建议仍然有效,至少可以帮助您调试此问题 ;-)


在 Laravel 中不使用 Echo 使用 Pusher 时需要检查的几件事:

  • 确保您的群集设置正确。我刚刚检查了我自己的 仪表板并将 mt1 作为一个集群。可能是默认值 已过时。

  • Echo 被设置为做很多看不见的事情。其中之一是 将易于记忆的字符串转换为完整的命名空间 与 Pusher 通信时的对应方。所以如果你想跳过 Echo,你想确保你模仿这种行为 1 对 1,或者 否则它会坏掉。

关于最后一点,您可能需要执行以下操作:

var channel = pusher.subscribe('App/Events/application');
  • 也尝试复制文档 1 对 1,添加一些代码,使 渠道独特。我不知道内部结构,但可能是 PrivateChannel 需要唯一参数,但不起作用 没有:

像这样:

public function broadcastOn()
{
    return new PrivateChannel('order.'.$this->update->order_id);
}

然后为您的频道:

Broadcast::channel('order.{orderId}', function ($user, $orderId) {
    return $user->id === Order::findOrNew($orderId)->user_id;
});

首先尝试使用 Echo,按照文档获取所有内容 运行。它提供了很大的便利层。然后从那里分解它。至少这样你知道你已经掌握了所有基础知识并且你的应用程序和 Pusher 之间的通信正在工作! :-)

这就是我现在能想到的所有内容,而无需自己实际编写代码!希望其中之一对你有用。