2

在 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 Echo Server 并运行它laravel-echo-server start并在控制台中查看类似的内容[11:15:16 AM] - v7y-5DsMXHdBXcqzAAAA joined channel: 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 中的控制台显示 .info 以及有关频道的信息。据我所知,一切看起来都很好。

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

我有一个在不同浏览器中触发的 URL,其中包含以下内容: broadcast(new \App\Events\NewNumber(rand(1, 100));

当我触发该 url 时,应用程序在 Laravel 日志中记录了一些成功完成的内容:

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

而且我也php artisan queue:listen正在运行(QUEUE_DRIVER:数据库)。但是数据库保持空..

我真的无法弄清楚我错过了什么.. 错过了什么?!...

4

1 回答 1

0

问题出在命名空间中

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

于 2017-05-02T14:18:05.023 回答