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

Laravel回声事件广播无法在侦听器上接收

孔甫
2023-03-14

Laravel广播的想法很棒,但是很难弄清楚如何让它工作。即使在阅读文档多次,看了许多教程...也许我只是错过了一些小事。谁知道呢?

我在Homestead上的Laravel 5.4项目中运行以下代码

# Event
class NewNumber implements ShouldBroadcast
{
    use InteractsWithSockets, SerializesModels;

    public $number;

    public function __construct($number)
    {
        $this->number = $number;
    }

    public function broadcastOn()
    {
        return new Channel('pub-channel');
    }
}

# EventServiceProvider:
protected $listen = [
        'App\Events\NewNumber' => [
            'App\Listeners\DoSomeThingsWithNewNumber',
        ],
    ];

广播的配置设置为Redis。我安装了Laravel回声服务器,并使用laravel-echo-server start运行此功能,并在控制台中看到类似于[11:15:16 AM]-v7y-5DsMXHdBXcqzAAAA加入通道:pub-bingo

它创建了以下配置:

{
    "authHost": "http://localhost",
    "authEndpoint": "/broadcasting/auth",
    "clients": [],
    "database": "redis",
    "databaseConfig": {
        "redis": {},
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": true,
    "host": null,
    "port": "6001",
    "protocol": "http",
    "socketio": {},
    "sslCertPath": "",
    "sslKeyPath": ""
}

在javascript中,我添加了:

import Echo from "laravel-echo";

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001'
});

console.info(window.Echo.channel('pub-channel'));

window.Echo.channel('pub-channel')
    .listen('NewNumber', (e) => {
        console.info(e);
        alert('Something happened');
        console.log(e.number);
    });

Chrome中的控制台显示了。信息与有关频道的信息。在我看来一切都很好。

但是没有发生的是,我在监听方法中的警报和console.loggin。

我有一个我在不同浏览器中触发的URL,里面有这个:广播(new\App\Events\NewNumber(rand(1,100));

当我触发该网址时,应用程序会在Laravel-log中记录一些成功完成的事情:

[2017-04-30 11:38:44] local.INFO: Broadcasting [App\Events\NewNumber] on channels [pub-channel] with payload:
{
    "number": 54,
    "socket": null
}  

我还运行了php artisan队列:listen(队列驱动程序:数据库)。但数据库仍然是空的。。

我真的不知道我错过了什么...少了什么?!...

共有1个答案

郁明诚
2023-03-14

问题出在名称空间中

window.Echo.channel('pub-channel')
.listen('.NewNumber', (e) => {
    console.info(e);
    alert('Something happened');
    console.log(e.number);
});

在NewNumber之前添加一个点,您可以在文档中了解更多信息:https://laravel.com/docs/5.3/broadcasting#namespaces

 类似资料:
  • 我可以在下面的代码中为添加事件侦听器,但不能添加到。 是不是因为twitter做了一些事情不让我这么做?有办法绕过它吗?

  • 为了在频道上播放事件,我使用了laravel Echo、redis和socket io。 这是我的活动: 插座。io服务器我正在使用laravel echo服务器,下面是配置: 这是文件中的Echo结构: 运行laravel echo server和call event后,控制台中会显示以下日志,其中显示到频道的事件广播: 但Echo无法收听频道并发生事件。 问题是什么?

  • 我使用Laravel成功地安装了WebSocket,并使用了自己的实现。现在我想切换到Laravel Echo和Laravel Echo服务器。但是,经过几个小时的尝试和阅读我能找到的每一份文档后,我确实需要进一步的帮助。 触发事件时发生的情况:队列工作程序根据需要处理事件:“已处理:照亮\广播\广播事件”。但是在laravel echo服务器控制台和客户端上都不会发生任何事情。 一些信息: >

  • 我有一个时钟小部件Android应用程序,我现在正试图更新到API 26的要求。 到目前为止,我使用了一个后台服务,它在启动时在其方法a中注册,以接收系统广播,例如。然后,这项服务在屏幕关闭时暂停时钟,在屏幕重新打开时唤醒时钟,以节省电池。 在Oreo中,这类服务似乎不是一个选项,因为它必须在前台运行,并带有一个对用户没有意义的通知。此外,据我在文档中看到的,也帮不上我的忙,因为我没有发现可以将作

  • 活动是: 路线/频道。php是: 在刀片文件中: 广播频道工作正常。但在私密频道里,这是行不通的。并且在控制台中没有显示任何错误 我使用拉威尔回声和推进器

  • 我目前正在尝试编写一些JavaScript来获取已单击的类的属性。我知道要正确地执行此操作,我应该使用事件监听器。我的代码如下: 我希望每次点击其中一个类时都有一个警告框来告诉我该属性,但不幸的是,这并不起作用。有人能帮忙吗?