当前位置: 首页 > 知识库问答 >
问题:

如何排除Laravel广播推送...?

司寇善
2023-03-14

我正在遵循Laravel文档来设置使用推送器的广播,它看起来很简单,但是我还没有得到它的工作,所以我一定是在路上的某个地方犯了一个错误。

以下是我所做的:

服务器端

我创建了一个事件,它实现了ShouldBroadcastNow接口,并定义了broadcastsOn()方法。

class ThreadMessageCreated implements ShouldBroadcastNow {
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public functhtml" target="_blank">ion broadcastOn() {
        return new Channel('bobtest');
    }

我正在从我的一个API控制器引发事件:

public function createMessage(Thread $thread, Request $request) {
    ...
    event(new ThreadMessageCreated($message, $thread));
    return $message;
}

我已经在我的. env文件中配置了推进器凭据。

客户端

我已经在客户端配置了Laravel Echo(通过angular Laravel Echo包),并将我的客户端订阅到该频道。

ngOnInit() {
    this.echo
        .join('bobtest', 'public')
        .listen('bobtest', 'ThreadMessageCreated')
        .subscribe(()=>alert('message received'));
    console.log(this.echo);
}

然而,当我的APIendpoint被命中时,事件被触发,但在客户端我看不到任何东西。

因此,我添加了日志记录在广播on()方法中,以验证它被调用。然后,我将驱动程序从推送器更改为log,并且我确实看到广播信息被写入laravel.log文件。

因此,我假设在使用Pusher驱动程序时,广播也会发生,或者没有从Laravel发送,或者没有被客户端接收。

我不熟悉插座,普什,

  • 我在laravel中没有看到任何错误。日志文件
  • 我在客户端的Chrome开发工具中没有看到任何错误
  • 我登录到pusher,“错误日志”选项卡中没有错误

我能做些什么来获得更多的细节来找出问题发生的地方?

谢谢!:-)

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

此外,我只使用Laravel作为后端,使用JWT身份验证。我目前没有使用laravel csrf令牌,不确定这是否相关。


共有1个答案

封永嘉
2023-03-14

我现在了解到我可以在开发工具中查看web套接字数据。我假设这个错误以前就存在过,我只是没有注意到。我猜101状态代码对我来说并不突出:-o

但在查看开发工具后,我可以清楚地看到这个错误:

{
    message: "App key xxx not in this cluster. Did you forget to specify the cluster?",
    event: "pusher:error"
}

要查看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
        }
    }
});
 类似资料:
  • 所以我尝试使用redis设置广播,但是我无法让它工作,因为我想我缺少一些配置选项。 . env文件 控制器 测试员。php 但是,当我在数据库的failed_jobs表中运行此操作时,会弹出以下错误: Symfony\Component\Debug\Exception\fatalthrowable错误:在/var/www/vendor/light/broadcasting/BroadcastMan

  • 如何使用自定义身份验证方法对通道的用户进行身份验证? 例如,在我的应用程序中,我为我的API使用令牌认证(存储在每个用户的数据库中),通过标头传递,并由自定义中间件读取。 如何使用这些通道的自定义身份验证方法控制访问?客户端和服务器端如何?我使用socket.io和Laravel文档非常不清楚授权方法是如何工作的套接字。 使用案例: 我使用默认的Laravel迁移将用户存储在DB中。然而,我的应用

  • 除了擅长编写 md 电子书来攒 Star,我还写了一系列的开源软件,也掌握了一些项目运营的技巧。 开源并不是你把软件、README 写好就行了,还有详细的文档、示例程序等等。 开源也不是你的项目好了,就会有一堆人参与进来。 开源还要你帮助别人解决 Bug,……。 人们做事都是有原因的,即动机。再举例一下,如果你的项目不够火,别人都没听过,那么写到简历上可能没啥用。 Marketing First

  • 前言 在现代的 web 应用程序中,WebSockets 被用来实现需要实时、即时更新的接口。当服务器上的数据被更新后,更新信息将通过 WebSocket 连接发送到客户端等待处理。相比于不停地轮询应用程序,WebSocket 是一种更加可靠和高效的选择。 我们先用一个电子商务网站作为例子来概览一下事件广播。当用户在查看自己的订单时,我们不希望他们必须通过刷新页面才能看到状态更新。我们希望一旦有更

  • 我已经为我的应用程序设置了Pusher和Laravel Echo,以便在某些事件触发时通知用户。 我已经测试过,看看设置是否通过在“公共频道”上播放而工作,并成功地看到这是工作。 以下是活动本身: 公共频道: app/resources/assets/js/bootstrap。js: 和Laravel回声注册:(它是在我的主布局的头部部分,事件射击视图延伸。) 现在,这种设置适用于公共频道广播,但

  • 我有一个大小为(1000,30,16,16)的张量。我正在做如何使其正常化的实验。我正在尝试跨案例进行规范化,可能是频率轴等。 以下工作: 我得到: 操作数不能与形状一起广播(1000, 30, 16, 16) (30,) 它似乎在(30,16,16)这样的简单情况下成功地完成了丢失的轴 (16, 16) (16,) (1,) 但是当丢失的轴是右边而不是左边时失败,例如:(1000,30),它不能