为啥 laravel 广播频道有默认前缀?

Posted

技术标签:

【中文标题】为啥 laravel 广播频道有默认前缀?【英文标题】:Why laravel broadcast channel has default prefix?为什么 laravel 广播频道有默认前缀? 【发布时间】:2021-05-26 05:35:23 【问题描述】:

目前我正在使用 react native 开发一个移动应用程序,作为后端我使用的是 Laravel。

作为客户端的频道客户端库,我使用Pusher

这就是我的频道路径在后端的样子

Broadcast::channel('conversation.message_id', function ($user,$id) 
    return true;
);

我可以成功广播,但是在推送器调试控制台中,我注意到在路由中添加了前缀(私有)。

这是我收听事件的方式

                const pusher = new Pusher('XXXX', 
                    cluster: 'eu',
                    authEndpoint: 'http:backend.test/api/broadcasting/auth',
                    auth: 
                        headers: 
                            Authorization: `Bearer `+token,
                            Accept: 'application/json',
                        ,
                    ,
                );
                const channel = pusher.subscribe('private-conversation.7');
                channel.bind('App\\Events\\MessageSent', function (data) 
                    console.log("event")
                    console.log(data);
                );

正如您在我的代码中看到的,我订阅了“private-conversation.7”,推送器调试控制台显示客户端已成功订阅频道,但问题是客户端没有监听事件,当我在 pusher 中创建一个自定义事件并将“conversation.7”设置为频道名称(我删除了 private- 前缀)成功触发的事件。

有什么建议吗?

【问题讨论】:

【参考方案1】:

这是用于分隔私人、公共和在线频道的约定。

当您订阅带有private-前缀的频道时,它将需要身份验证过程。

Laravel 会在广播时自动为频道名称添加private- 前缀。

/**
 * Get the channels the event should broadcast on.
 *
 * @return \Illuminate\Broadcasting\PrivateChannel
 */
public function broadcastOn()

    return new PrivateChannel('orders.'.$this->order->id);

这里是参考文档:

https://pusher.com/docs/channels/using_channels/private-channels

【讨论】:

以上是关于为啥 laravel 广播频道有默认前缀?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 使用 Socket.io 广播到私人频道

无法使用 Redis 和 Laravel 5.3 在私有频道上广播通知

laravel5.5事件广播系统

Laravel事件不是广播

无法广播客户端事件(连接未订阅频道私聊)

Laravel Echo + VueJS 广播/认证问题