如何对Laravel Broadcasts + Pusher ..进行故障排除??

时间:2018-10-13 02:35:17

标签: laravel laravel-5.6 pusher laravel-echo

我正在遵循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文件中没有看到任何错误。
  • 我在客户端的Chrome开发工具中看不到任何错误。
  • 我登录了pusher,“错误日志”标签中没有错误

如何获取更多详细信息以找出问题出在哪里?

谢谢! :-)

[UPDATE] 我可以看到广播出现在我的Pusher帐户中,所以问题似乎出在客户端。也许我没有正确订阅正确的频道?

此外,我仅使用Laravel作为后端,使用JWT身份验证。我目前未使用laravel csrf令牌,不确定是否可以使用。

1 个答案:

答案 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套接字):

Web Sockets in Chrome Dev Tools

就我而言,我只需要在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
        }
    }
});