идея вещания в 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: база данных). Но база данных остается пустой.
Я действительно больше не могу понять, чего мне не хватает.. Чего не хватает?!...