Не удалось получить уведомление - Laravel с Socket.io
Я пытаюсь создать приложение для чата, и для этого я использую эхо-сервер Laravel's Echo и Laravel. Идея заключается в том, чтобы прослушать сообщение уведомления.
Я сделал все в соответствии с:
https://laravel.com/docs/master/notifications
https://laravel.com/docs/master/broadcasting
resources / assets / js / bootstrap.js: (конечно, я собрал его, используя NPM)
import Echo from 'laravel-echo'
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001'
});
Laravel эхо-server.json:
{
"authHost": "http://laravel-notifications.local",
"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": ""
}
ChatController.php (для запуска уведомления)
$toUser = User::find($toUser)->notify(new MessageNotification($message));
MessageNotification.php
public function toBroadcast($notifiable)
{
return new BroadcastMessage([
'message' => $notifiable,
]);
}
Blade view (прослушивание уведомлений):
window.Echo.private('App.User.' + window.Laravel.user.id)
.notification((notification) => {
console.log(notification); // Not getting executing
});
Когда я захожу на страницу, я вижу следующий журнал с сервера Laravel Echo:
[9:34:41 AM] - XnmH1wzMJM-5VON-AAAA аутентифицирован для: private-App.User.7
[9:34:41 AM] - XnmH1wzMJM-5VON-AAAA присоединился к каналу: private-App.User.7
Но когда я запускаю это уведомление, я не вижу ничего зарегистрированного на консоли браузера.
Полный исходный код:
https://github.com/xparthxvorax/Laravel-Notifications
NB: я успешно могу слушать событие, но не уведомления.
1 ответ
В уведомлении в части канала вещания необходимо указать очередь, которая будет отправлять вещание. Например:
public function toBroadcast($notifiable)
{
return (new BroadcastMessage([
'html' => $data
]))->onConnection('database')->onQueue('alerts');
}