我正在遵循Laravel Documentation来使用Pusher设置广播,它看起来很简单,但是我还没有开始工作,所以我一定在此过程中犯了一个错误。
这就是我所做的:
服务器端
我创建了一个实现Event
接口并定义了ShouldBroadcastNow
方法的broadcastsOn()
。
class ThreadMessageCreated implements ShouldBroadcastNow {
use Dispatchable, InteractsWithSockets, SerializesModels;
public function broadcastOn() {
return new Channel('bobtest');
}
我正在从我的一个API控制器引发事件:
public function createMessage(Thread $thread, Request $request) {
...
event(new ThreadMessageCreated($message, $thread));
return $message;
}
我已经在.env
文件中配置了推送者凭据。
客户端
我已经在客户端(通过angular-laravel-echo软件包)配置了Laravel Echo,并将我的客户端订阅了该频道。
ngOnInit() {
this.echo
.join('bobtest', 'public')
.listen('bobtest', 'ThreadMessageCreated')
.subscribe(()=>alert('message received'));
console.log(this.echo);
}
但是,当我的API端点被命中时,该事件被触发,但是在客户端却看不到任何东西。
因此,我在loggingOn()方法中添加了日志记录以验证它是否已被调用。然后,将驱动程序从pusher
更改为log
,并且确实看到广播信息已写入laravel.log
文件中。
因此,我假定,当使用Pusher驱动程序时,广播也在发生,不是从Laravel发送出去的,就是客户端没有收到的。 / p>
我是套接字,推动器和Laravel Echo的新手,所以我不确定在哪里可以找到更多信息来进行追踪。
laravel.log
文件中没有看到任何错误。如何获取更多详细信息以找出问题出在哪里?
谢谢! :-)
[UPDATE] 我可以看到广播出现在我的Pusher帐户中,所以问题似乎出在客户端。也许我没有正确订阅正确的频道?
此外,我仅使用Laravel作为后端,使用JWT身份验证。我目前未使用laravel csrf令牌,不确定是否可以使用。
答案 0 :(得分:2)
我现在了解到可以在开发工具中看到Web套接字数据。我以为这个错误是以前存在的,我只是没有注意到。我想101状态代码对我来说并不突出:-o
但是在查看开发工具后,我可以清楚地看到此错误:
{
message: "App key xxx not in this cluster. Did you forget to specify the cluster?",
event: "pusher:error"
}
要查看Web套接字活动:
Dev工具>网络>过滤器> WS(Web套接字):
就我而言,我只需要在Laravel Echo配置中指定集群:
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'xxxxxxxxxxxxxxxxxxxx',
cluster: 'us2', <--------------[pusher needs a cluster :-)]
host: 'http://the-host.com',
auth: {
headers: {
'Authorization': 'Bearer ' + token
}
}
});