Вещание Laravel Echo Event не может быть получено на Listener

идея вещания в Laravel великолепна, но трудно понять, как заставить это работать. Даже после многократного прочтения документации, просмотра множества руководств. Возможно, я просто упустил какую-то мелочь. Кто это знает?

Следующий код, который я запускаю в проекте Laravel 5.4 в Homestead:

# 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));

И что-то приложение регистрирует в журналах Laravel, что оно успешно выполнено, когда я запускаю этот URL-адрес:

[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: база данных). Но база данных остается пустой.

Я действительно больше не могу понять, чего мне не хватает.. Чего не хватает?!...


person user1469734    schedule 30.04.2017    source источник
comment
сначала установите драйвер очереди для синхронизации и широковещательного драйвера для регистрации и сообщите мне вывод   -  person msonowal    schedule 01.05.2017


Ответы (1)


проблема в пространстве имен

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

person simo logas    schedule 02.05.2017