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 之间的通信正在工作! :-)
这就是我现在能想到的所有内容,而无需自己实际编写代码!希望其中之一对你有用。
我的场景
我试图让 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 之间的通信正在工作! :-)
这就是我现在能想到的所有内容,而无需自己实际编写代码!希望其中之一对你有用。