Laravel 8使用Pusher推送事件名携带命名空间路径问题排查
Laravel Pusher 广播事件名带命名空间导致Flutter端收不到通知的解决方法
问题根因
Laravel 框架的广播系统默认会使用事件类的完整命名空间(即你在Pusher后台看到的App\Events\eventnotify)作为推送到Pusher的事件名称,不会自动使用类短名eventnotify。
你之前尝试把Flutter端监听事件名改成App\Events\eventnotify仍无法接收,是因为字符串中的反斜杠\在Dart语法、Pusher协议传输中属于转义字符,代码中写的字面量和实际推送的事件名字符串不匹配,导致监听规则命中失败。
解决步骤
- 在你的
App\Events\eventnotify事件类中新增broadcastAs()方法,手动指定广播时使用的事件名,即可覆盖默认带命名空间的命名规则,方法和现有broadcastOn()方法同级即可:
public function broadcastAs() { return 'eventnotify'; }
- 如果你开启了广播队列(实现
ShouldBroadcast接口的事件默认走队列,除非实现ShouldBroadcastNow接口跳过队列),修改完代码后必须重启队列工作进程,否则旧代码缓存会导致修改不生效,重启命令如下:
php artisan queue:restart
- 修改完成后再次触发事件,去Pusher调试控制台确认事件名变为
eventnotify,此时Flutter端保持监听eventnotify即可正常接收消息。
可选优化
你当前代码里提前把数据json_encode成字符串再传给事件是多余操作,Laravel广播会自动将事件类的所有public属性序列化后推送给Pusher,直接传数组结构即可,客户端拿到的会是标准JSON对象,不需要额外做字符串转JSON解析。
内容的提问来源于stack exchange,提问作者miad
相关产品推荐
相关产品推荐

