Пытаюсь сделать real-time chat. Установил redis и laravel-echo-server.
Вот конфиги echo server
{
"authHost": "http://hobby.website.local",
"authEndpoint": "/broadcasting/auth",
"clients": [
{
"appId": "id",
"key": "key"
}
],
"database": "redis",
"databaseConfig": {
"redis": {
"host": "127.0.0.1",
"port": "6379",
"db": 0
},
"sqlite": {
"databasePath": "/database/laravel-echo-server.sqlite"
}
},
"devMode": true,
"host": "hobby.website.local",
"port": "6001",
"protocol": "http",
"socketio": {},
"secureOptions": 67108864,
"sslCertPath": "",
"sslKeyPath": "",
"sslCertChainPath": "",
"sslPassphrase": "",
"subscribers": {
"http": true,
"redis": true
},
"apiOriginAllow": {
"allowCors": false,
"allowOrigin": "",
"allowMethods": "",
"allowHeaders": ""
}
далее установил horizon для обработки очереди, указал обработчик очередей redis в .env и BROADCAST_DRIVER в redis.
Cоздал событие
class MessageToPrivateTree implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
private $treeId;
public $msg;
public function __construct(Int $treeId, $msg) {
$this->treeId = $treeId;
$this->msg = $msg;
}
public function broadcastOn()
{
return new PresenceChannel('chat.private.' . $this->treeId);
}
}
и слушаю его таким образом
this.treeChannel = Socket.join(`chat.private.${chat.id}`);
this.treeChannel.here((users) => dl.log("users in chat:", users));
this.treeChannel.joining((user) => dl.log("New user join:", user));
this.treeChannel.leaving((user) => dl.log("User leave:", user));
this.treeChannel.listen("MessageToPrivateTree", (e) => dl.log(e, "ex"));
все работает нормально
вот логи echo server
here, joining и leaving выводят сообщения в консоль, но как только нужно обработать listen ничего не происходит, в Network он также не приходит. Как это побороть?
Laravel 5.8
laravel echo server 1.5.6
redis-server 3.0.6