为啥 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 广播频道有默认前缀?的主要内容,如果未能解决你的问题,请参考以下文章