возникают данные ошибки?
1) Unhandled promise rejection with TypeError: React\Http\Io\ClientRequestStream::closeError(): Argument #1 ($error) must be of type Exception, Error given, called in ...
2) Unhandled promise rejection with RuntimeException: Request timed out after 60 seconds in
Ошибка возникает примерно через минуту после включения вебсокет сервера.
Сами events отрабатывают нормально и далее после этой ошибки.
Я правильно понимаю, что мне надо как-то увеличить время listen очереди или проблема не в этом?
Ошибку не так отлавливаешь. Должна быть Error, а прилетает Exception
То есть нужно еще в custom websocket handlers самому писать метод для отлавливания ошибки?
Скорее там где должно отлавливаться. Без полного кода сложно сказать почему именно это поведение срабатывает. Может снаружи что-то не то летит
Спасибо, завтра буду смотреть еще раз, что не так.
app/Providers/BroadcastServiceProvider.php (не забыть раскоментировать в config/app.php) @see https://github.com/beyondcode/laravel-websockets/issues/879#issuecomment-1600879208 public function boot(): void { app(BroadcastManager::class)->extend('pusher-custom', function () { $pusher = new Pusher( config('broadcasting.connections.pusher.key'), config('broadcasting.connections.pusher.secret'), config('broadcasting.connections.pusher.app_id'), config('broadcasting.connections.pusher.options'), new Client(['verify' => false]), ); return new PusherBroadcaster($pusher); }); Broadcast::routes(); require base_path('routes/channels.php'); } laravel-worker.ini/conf (не знаю связано ли с событиями веб-сокетов, но на всякий случай прикладываю, может пригодиться) [program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /var/www/html/mydomain/artisan queue:work --queue=default --sleep=15 --tries=3 autostart=true autorestart=true user=user numprocs=1 redirect_stderr=true stdout_logfile=/var/www/html/mydomain/worker.log stopwaitsecs=15 websockets.ini/conf [program:laravel-websockets] directory=/var/www/html/mydomain/ command=php artisan websockets:serve --host=0.0.0.0 --port=6001 numprocs=1 autostart=true autorestart=true user=root redirect_stderr=true stderr_logfile=/var/log/websockets.err.log stdout_logfile=/var/log/websockets.out.log Что учесть ещё: - проверить открыт ли порт на сервере, не блокирует ли фаервол (у некоторых админов серверов может быть несколько слоёв защиты). - посмотреть какие порты и IP-адреса используются: netstat -ntlp | grep LISTEN - php artisan cache:clear - php composer dump-autoload - supervisorctl update - supervisorctl restart all - помнить что при изменении парамтеров .env VITE_* нужно пересобирать сборку: VITE BUILD - Если понижались версии пакетов, можно попробовать переустановить их в чистом виде (в том числе почистить таблицы и миграции beyondcode/laravel-websockets. + полезный комментарий на гитхабе: https://github.com/beyondcode/laravel-websockets/issues/589#issuecomment-715891226
Мои настройки для сайта на отдельном домене, при которых работает дашборд /laravel-websockets без ошибок, отправляются и принимаются сообщения. В моём случае используется сборщик Vite и Livewire. Может кому-то поможет. /etc/httpd/conf.d/ssl.conf Listen 443 <VirtualHost *:443> ServerName mydomain DocumentRoot /var/www/html/mydomain/public RewriteEngine on RewriteCond ${HTTP:Upgrade} websocket [NC] RewriteCond ${HTTP:Connection} upgrade [NC] RewriteRule ^/app/(.*)$ ws://127.0.0.1:6001/app/$1 [P,L] ProxyPass "/app" "ws://127.0.0.1:6001/app" ProxyPassReverse "/app" "ws://127.0.0.1:6001/app" # Прочие настройки </VirtualHost> composer.json версии пакетов "ext-curl": "*", "beyondcode/laravel-websockets": "^1.14", "guzzlehttp/guzzle": "^7.4.2", "laravel/framework": "^9.0", "livewire/livewire": "^2.12", "pusher/pusher-php-server": "7.2.3", npm версии пакетов "laravel-echo": "^1.15.2", "laravel-vite-plugin": "^0.7.8", "pusher-js": "^8.2.0", "vite": "^4.4.3", .env APP_URL_BASE=mydomain APP_URL=https://${APP_URL_BASE} LOG_LEVEL=debug BROADCAST_DRIVER=pusher-custom QUEUE_CONNECTION=database PUSHER_APP_ID=12345678 PUSHER_APP_KEY=12345678 PUSHER_APP_SECRET=01234567 PUSHER_APP_SCHEME=https PUSHER_APP_CLUSTER=mt1 PUSHER_PORT=6001 VITE_PUSHER_HOST="${APP_URL_BASE}" VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" LARAVEL_WEBSOCKETS_PORT="${PUSHER_PORT}" LARAVEL_WEBSOCKETS_DOMAIN="${APP_URL_BASE}" LARAVEL_WEBSOCKETS_PATH=laravel-websockets LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT="/path/to/cert.pem" LARAVEL_WEBSOCKETS_SSL_LOCAL_PK="/part/to/private.pem" LARAVEL_WEBSOCKETS_SSL_PASSPHRASE=null LARAVEL_WEBSOCKETS_VERIFY_PEER=false LARAVEL_WEBSOCKETS_ALLOW_SELF_SIGNED=false config/websockets.php return [ 'dashboard' => [ 'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001), ], 'apps' => [ [ 'id' => env('PUSHER_APP_ID'), 'name' => env('APP_NAME'), 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'path' => env('PUSHER_APP_PATH'), 'capacity' => null, 'enable_client_messages' => false, 'enable_statistics' => true, 'encrypted' => true, ], ], 'ssl' => [ 'local_cert' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT', null), 'local_pk' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_PK', null), 'passphrase' => env('LARAVEL_WEBSOCKETS_SSL_PASSPHRASE', null), 'verify_peer' => env('LARAVEL_WEBSOCKETS_VERIFY_PEER', false), 'allow_self_signed' => env('LARAVEL_WEBSOCKETS_ALLOW_SELF_SIGNED', false), ], /* (остальное стандартно) */ ]; config/broadcasting.php return [ 'default' => env('BROADCAST_DRIVER', 'null'), 'connections' => [ 'pusher-custom' => [ 'driver' => 'pusher-custom' ], 'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'cluster' => env('PUSHER_APP_CLUSTER'), 'useTLS' => true, 'encrypted' => false, 'host' => '127.0.0.1', 'port' => 6001, 'scheme' => 'https', 'curl_options' => [ CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0, ] ] ], ] ];
Arthur Shlain, мы обнаружили что Ваше сообщение больше чем наполовину состоит из кода. Рекомендуем сохранять примеры кода на внешних источниках, например, https://paste.laravel.io
pastebin, gist.github
Ща оформлю
У супервизора пропустил команду supervisorctl reread, которую нужно запускать перед апдейтом чтобы обновить кэш раннее прочитанных конфигураций иначе "обновит" из кэша.
Спасибо! Я сегодня просто перезапустил комп и все заработало, возможно в cache что-то не обновилось. Пойду дальше изучать)
Обсуждают сегодня