我正在遵循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令牌,不确定这是否相关。
我现在了解到我可以在开发工具中查看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),它不能