За последние 24 часа нас посетили 8526 программистов и 1152 робота. Сейчас ищут 414 программистов ...

Laravel websocket через server echo

Тема в разделе "Laravel", создана пользователем bogopodob, 20 сен 2022 в 19:42.

Метки:
  1. bogopodob

    bogopodob Новичок

    С нами с:
    Вторник
    Сообщения:
    7
    Симпатии:
    0
    Всем привет,, хотел бы попросить помощи в настройки websocket на laravel. Убил много времени но так и не решить настройку. Можно с кем-то списаться. Заранее спасибо.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.389
    Симпатии:
    1.700
    А что конкретно не получается? Давай тут, чтоб и другим полезно было. Лично я чисто по-инструкции всегда без проблем поднимаю. Опиши конкретнее проблемы, с которыми сталкиваешься

    1. Какая настройка Echo - через Redis или push-api
    2. Авторизованные или нет каналы
    3. Есть ли сообщения об ошибках, и какие.
     
  3. bogopodob

    bogopodob Новичок

    С нами с:
    Вторник
    Сообщения:
    7
    Симпатии:
    0
    Добрый день, mkramer. Делал все из инструкции.
    1). Я пробовал через pusher и redis, но остановился на pusher.
    2). Для теста создал один канал.
    3). Возможно проблема в этом но я не знаю, у меня бэк на laravel, а фронт на react и без использования mix, т.е. все отделено. Во фронте я делаю так:
    Код (Javascript):
    1. window.io = require('socket.io-client');
    2. const echo = new Echo({
    3.     broadcaster: 'socket.io',
    4.     host: window.location.hostname + ':6001',
    5. });
    и начинается отправка get запросов со статусом 200 и ответом (97:0{"sid":"O7VmcHQNwVUU7deTAATi","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":20000}2:40).
    Я полагаю, что мне нужно делать wss?
    .env
    BROADCAST_DRIVER=pusher

    config\broadcasting

    PHP:
    1. 'pusher' => [
    2.             'driver' => 'pusher',
    3.             'key' => env('PUSHER_APP_KEY'),
    4.             'secret' => env('PUSHER_APP_SECRET'),
    5.             'app_id' => env('PUSHER_APP_ID'),
    6.             'options' => [
    7.                 'cluster' => env('PUSHER_APP_CLUSTER'),
    8. //                'useTLS' => true,
    9.                 'host' => '127.0.0.1',
    10.                 'port' => 6001,
    11.                 'scheme' => 'http'
    12.             ],
    13.             'client_options' => [
    14.                 // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html
    15.             ],
    16.         ],
    App\Events\NewMessage
    PHP:
    1. class NewMessage implements ShouldBroadcast
    2. {
    3.     use Dispatchable, InteractsWithSockets, SerializesModels;
    4.  
    5.     /**
    6.      * @var string
    7.      */
    8.     public string $message;
    9.  
    10.     /**
    11.      * Create a new event instance.
    12.      *
    13.      * @return void
    14.      */
    15.     public function __construct(string $message)
    16.     {
    17.         $this->message = $message;
    18.     }
    19.  
    20.     /**
    21.      * @return Channel
    22.      */
    23.     public function broadcastOn() : Channel
    24.     {
    25.         return new Channel('home');
    26.     }
    27. }
    Заранее спасибо.
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.389
    Симпатии:
    1.700
    На клиенте всё выглядит нормально. Конфиг пушера не совпадает с документацией laravel-echo. Сам Echo что-то пишет в логах?
     
  5. bogopodob

    bogopodob Новичок

    С нами с:
    Вторник
    Сообщения:
    7
    Симпатии:
    0
    Echo в логах, это в консольке которые?

    app: connection id 577133487.720946425 received message: {"event":"pusher:ping","data":{}}.
    Connection id 577133487.720946425 sending message {"event":"pusher:pong"}
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.389
    Симпатии:
    1.700
    Это где? Я имел в виду серверные логи Laravel Echo. Там?
     
  7. bogopodob

    bogopodob Новичок

    С нами с:
    Вторник
    Сообщения:
    7
    Симпатии:
    0
    Нет, пусто.
     
  8. bogopodob

    bogopodob Новичок

    С нами с:
    Вторник
    Сообщения:
    7
    Симпатии:
    0
    Когда я запускаю 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\"}"}}
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.389
    Симпатии:
    1.700
    А... Я просто не понял вопроса, поскольку эта новая приблуда, её ещё не пробовал... А я вам про laravel-echo всё пишу, с ним работал много... Это который на ноде.
    --- Добавлено ---
    А эту штуку ещё не успел попробовать, не могу сказать, что там и как. Извините
     
  10. bogopodob

    bogopodob Новичок

    С нами с:
    Вторник
    Сообщения:
    7
    Симпатии:
    0
    Кстати, насчет node, я запускал его и мне ответ в консоли падал, запускаю event через tinker event(new \App\Events\NewMessage('hi'))
    Ответ
    Channel: medicine_database_mychannel
    Event: App\Events\NewMessage

    Я так полагаю у меня все норм?
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.389
    Симпатии:
    1.700
    Ну теперь надо посмотреть, чего доходит до фронта. Во вкладке WS вкладки Network панели разработчика
    --- Добавлено ---
    И вообще, держится ли соединение
     
  12. bogopodob

    bogopodob Новичок

    С нами с:
    Вторник
    Сообщения:
    7
    Симпатии:
    0
    Так запросы идут

      1. URL запроса:http://localhost:6001/socket.io/?EIO=4&transport=polling&t=ODX2VUX
      2. Метод запроса:GET
      3. Код статуса:200 OK
      4. Удаленный адрес:[::1]:6001
      5. Правило для URL перехода:strict-origin-when-cross-origin
    1. Заголовки ответов
      1. Access-Control-Allow-Credentials:true
      2. Access-Control-Allow-Origin:http://localhost:3000
      3. Connection:keep-alive
      4. Content-Length:104
      5. Content-Type:text/plain; charset=UTF-8
      6. Date:Wed, 21 Sep 2022 17:13:06 GMT
      7. Keep-Alive:timeout=5
      8. Set-Cookie:io=AfGc6VOKDR2LbnfEAAHP; Path=/; HttpOnly; SameSite=Strict
    2. Заголовки запросов
      GET /socket.io/?EIO=4&transport=polling&t=ODX2VUX HTTP/1.1
      1. Accept:*/*
      2. Accept-Encoding:gzip, deflate, br
      3. Accept-Language:ru-RU,ru;q=0.9,en-GB;q=0.8,en;q=0.7,en-US;q=0.6
      4. Connection:keep-alive
      5. DNT:1
      6. Host:localhost:6001
      7. Origin:http://localhost:3000
      8. Referer:http://localhost:3000/
      9. sec-ch-ua:"Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"
      10. sec-ch-ua-mobile:?0
      11. sec-ch-ua-platform:"Windows"
      12. Sec-Fetch-Dest:empty
      13. Sec-Fetch-Mode:cors
      14. Sec-Fetch-Site:same-site
      15. 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):
    1. let echo = new Echo({
    2.     broadcaster: 'pusher' вместо socket.io то во вкладке ws будет подключение со статусом 101 но с wss://ws-mt1.pusher.com/app/,
    3.     host: 'http://localhost:6001',
    4. });