Я пытаюсь использовать laravel-echo-server (socket.io). Я получаю контрольно-пропускной пункт, когда на стороне клиента, похоже, не транслируются события.
Кажется, все подключено нормально, и сервер socket.io сообщает, что подключается и авторизует пользователя, однако, когда я передаю сообщение, кажется, ничего не происходит. Событие появляется на Laravel Horizon, но в остальном ничего не происходит. Вот мой код:
server.js для запуска laravel-echo-server:
require('dotenv').config();
const env = process.env;
require('laravel-echo-server').run({
authHost: env.APP_URL,
devMode: env.APP_DEBUG,
database: "redis",
databaseConfig: {
redis: {
host: env.REDIS_HOST_PUBLIC,
port: env.REDIS_PORT,
}
}
});
Мой канал в channel.php
Broadcast::channel('message.pushed', function () {
return true;
});
Мое событие:
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class MessagePushed implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct()
{
$this->message = "My New Message";
}
/**
* Get the channels the event should broadcast on.
*
* @return Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('message.pushed');
}
}
Мой прослушиватель событий в app.js
import Echo from 'laravel-echo';
window.io = require('socket.io-client');
if (typeof io !== 'undefined') {
var token = $('meta[name="_token"]').attr('content')
window.Echo = new Echo({
auth : {
headers: {
Authorization: `Bearer ${token}`,
},
},
broadcaster: 'socket.io',
host : window.location.hostname + ':6001',
});
}
function listenForBroadcast() {
Echo.private('message.pushed')
.listen('MessagePushed', (e) => {
console.log(e)
console.log("Listened")
});
}
listenForBroadcast();
Наконец, маршрут, отправляющий сообщение:
Route::get('/event-test', function () {
broadcast(new App\Events\MessagePushed());
});
Я не совсем уверен, куда я пошелнеправильно или почему клиент ничего не получает.
При поиске в laravel-echo-server выводится командная строка:
Channel: laravel_database_private-message.pushed
Event: App\Events\MessagePushed