Всем привет,, хотел бы попросить помощи в настройки websocket на laravel. Убил много времени но так и не решить настройку. Можно с кем-то списаться. Заранее спасибо.
А что конкретно не получается? Давай тут, чтоб и другим полезно было. Лично я чисто по-инструкции всегда без проблем поднимаю. Опиши конкретнее проблемы, с которыми сталкиваешься 1. Какая настройка Echo - через Redis или push-api 2. Авторизованные или нет каналы 3. Есть ли сообщения об ошибках, и какие.
Добрый день, mkramer. Делал все из инструкции. 1). Я пробовал через pusher и redis, но остановился на pusher. 2). Для теста создал один канал. 3). Возможно проблема в этом но я не знаю, у меня бэк на laravel, а фронт на react и без использования mix, т.е. все отделено. Во фронте я делаю так: Код (Javascript): window.io = require('socket.io-client'); const echo = new Echo({ broadcaster: 'socket.io', host: window.location.hostname + ':6001', }); и начинается отправка get запросов со статусом 200 и ответом (97:0{"sid":"O7VmcHQNwVUU7deTAATi","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":20000}2:40). Я полагаю, что мне нужно делать wss? .env BROADCAST_DRIVER=pusher config\broadcasting PHP: '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, 'host' => '127.0.0.1', 'port' => 6001, 'scheme' => 'http' ], 'client_options' => [ // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html ], ], App\Events\NewMessage PHP: class NewMessage implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; /** * @var string */ public string $message; /** * Create a new event instance. * * @return void */ public function __construct(string $message) { $this->message = $message; } /** * @return Channel */ public function broadcastOn() : Channel { return new Channel('home'); } } Заранее спасибо.
На клиенте всё выглядит нормально. Конфиг пушера не совпадает с документацией laravel-echo. Сам Echo что-то пишет в логах?
Echo в логах, это в консольке которые? app: connection id 577133487.720946425 received message: {"event":"pushering","data":{}}. Connection id 577133487.720946425 sending message {"event":"pusherong"}
Когда я запускаю artisan websockets:serve и запускаю event(new \App\Events\NewMessage('hi')) то в консоле прилетает: Connection id 636986697.604169144 sending message {"event":"log-message","channel":"private-websockets-dashboard-api-message","data":{"type":"api-message","time":"04:54:52","details":"Channel: mychannel, Event: App\\Events\\NewMessage","data":"{\"message\":\"hi\"}"}}
А... Я просто не понял вопроса, поскольку эта новая приблуда, её ещё не пробовал... А я вам про laravel-echo всё пишу, с ним работал много... Это который на ноде. --- Добавлено --- А эту штуку ещё не успел попробовать, не могу сказать, что там и как. Извините
Кстати, насчет node, я запускал его и мне ответ в консоли падал, запускаю event через tinker event(new \App\Events\NewMessage('hi')) Ответ Channel: medicine_database_mychannel Event: App\Events\NewMessage Я так полагаю у меня все норм?
Ну теперь надо посмотреть, чего доходит до фронта. Во вкладке WS вкладки Network панели разработчика --- Добавлено --- И вообще, держится ли соединение
Так запросы идут URL запроса:http://localhost:6001/socket.io/?EIO=4&transport=polling&t=ODX2VUX Метод запроса:GET Код статуса:200 OK Удаленный адрес:[::1]:6001 Правило для URL перехода:strict-origin-when-cross-origin Заголовки ответов Access-Control-Allow-Credentials:true Access-Control-Allow-Origin:http://localhost:3000 Connection:keep-alive Content-Length:104 Content-Type:text/plain; charset=UTF-8 Date:Wed, 21 Sep 2022 17:13:06 GMT Keep-Alive:timeout=5 Set-Cookie:io=AfGc6VOKDR2LbnfEAAHP; Path=/; HttpOnly; SameSite=Strict Заголовки запросов GET /socket.io/?EIO=4&transport=polling&t=ODX2VUX HTTP/1.1 Accept:*/* Accept-Encoding:gzip, deflate, br Accept-Language:ru-RU,ru;q=0.9,en-GB;q=0.8,en;q=0.7,en-US;q=0.6 Connection:keep-alive DNT:1 Host:localhost:6001 Origin:http://localhost:3000 Referer:http://localhost:3000/ sec-ch-ua:"Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105" sec-ch-ua-mobile:?0 sec-ch-ua-platform:"Windows" Sec-Fetch-Dest:empty Sec-Fetch-Mode:cors Sec-Fetch-Site:same-site User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Ответ: 97:0{"sid":"AfGc6VOKDR2LbnfEAAHP","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":20000}2:40 ВО вкладке ws ни чего нет но если использовать Код (Javascript): let echo = new Echo({ broadcaster: 'pusher' вместо socket.io то во вкладке ws будет подключение со статусом 101 но с wss://ws-mt1.pusher.com/app/, host: 'http://localhost:6001', });