这是 Laravel 7 的设置,遵循使用laravel-websockets而不是 Pusher的 pusher 驱动程序的安装指南。
'php artisan websockets:serve' 正在运行,并已连接到浏览器中的 Echo 客户端,并且正在愉快地发送 ping / pong 消息。
但是,当我尝试通过触发事件来发送服务器消息时
broadcast(new TestBroadcastingEvent($event));
我没有看到来自 websockets:serve 日志的活动,也没有在线上的消息(在 DevTools 中)。
我可以看到事件被构造,作业被排队并被执行,我可以看到正在调用的 broadcastOn() 方法。
public function broadcastOn()
{
\Log::debug("broadcastOn()");
return new PrivateChannel('order.'.$this->event->ch);
}
如果我将 BROADCAST_DRIVER 切换到“日志”,我会看到那里记录的消息:
[2021-05-07 14:08:59] testing.INFO: Broadcasting [App\Events\TestBroadcastingEvent] on channels [order.111] with payload:
{
"event": {
"ch": "111",
"info": "hello"
},
"socket": null
}
但是,如上所述,将 BROADCAST_DRIVER 设置为“推送器”不会导致进一步的活动。
队列驱动程序设置为“同步”的行为相同,因此不是队列设置。
我唯一的线索是通道身份验证功能没有被调用,但是从文档中并不清楚这是否与发送相关(比如监听身份验证)。
Broadcast::channel('order.{orderId}', function ($user, $orderId) {
\Log::debug('callback in channels.php');
return true;
});
任何日志中都没有错误,没有异常或任何明显错误。
我还能看什么来查看消息在哪里丢失?