Подключаем WebSocket (SockJS + Stomp). Spring Boot REST

Поделиться
HTML-код
  • Опубликовано: 7 фев 2025
  • Spring Boot Rest Application: подключаем WebSocket (через библиотеку SockJS) и отправляем сообщения по протоколу Stomp. С использованием данных технологий мы будем асинхронно обновлять данные в браузере клиента без перезагрузки станицы.
    Код из видео:
    github.com/dru...
    Руководство по подключению WebSocket к SprintBoot проекту:
    spring.io/guide...
    Can I use: WebSocket:
    caniuse.com/#s...
    Документация по StompJS:
    stomp-js.githu...
    Документация по SockJS:
    github.com/soc...
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    ➡ Твиттер: / letscodedru
    ➡ Чат в Discord: / discord
    ➡ Группа Вконтакте: letscod...
    ➡ Канал в Telegram: t.me/letsCode_dru
    ➡ Чат в Telegram: t.me/joinchat/...
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    Поддержать проект:
    ➡ Patreon / letscodedru
    ➡ Яндекс.Деньги money.yandex.r...
    ➡ PayPal paypal.me/letscodedru
    ➡ Qiwi qiwi.me/letscode
    ➡ WebMoney/BitCoin funding.webmon...
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    ➡ Ссылка на канал: / @letscodedru
    ➡ Ссылка на Яндекс.Дзен: zen.yandex.ru/...

Комментарии • 89

  • @dreamer_vi905
    @dreamer_vi905 Год назад +3

    Видосу уже скоро пять лет, но всё ещё полезный. Спасибо)

  • @ФедорШморгилов
    @ФедорШморгилов 6 лет назад +17

    Андрей, большое спасибо за все твои видео, отлично объясняешь!

  • @YuretsUA
    @YuretsUA 4 года назад +2

    Ни один урок не обходится без последствий, если просто выполнить особо не вдумываясь то ничего не отложится. Я вот попытался разобраться, застрял на 2 часа, никак не мог понять что происходить в handlers, все виной тому, что в java не сталкивался с функциональным программированием, и только потом понял что в handlers ложатся не объекты, а функции которым в последствии передаются сообщения из сервера, зачем такая примудрость пока не разобрался (в будущем думаю пойму) но блин в мозгу отложилось надежно. В очередной раз спасибо за видео, в каждом новом уроке новая технология, которая заставляет разбираться и развиваться. Удачи автору.

  • @fjgdkfjghksjdfhg
    @fjgdkfjghksjdfhg Год назад +1

    На одном дыхании

  • @IvanIvanov-oi5nx
    @IvanIvanov-oi5nx 6 лет назад +4

    Круть крутяшная!!!!! Респект, вот чего хотелось-то попробовать))) С нетерпением жду продолжения!!!

  • @nikitaantonenko3287
    @nikitaantonenko3287 5 лет назад +5

    Андрей спасибо огромное!!!))) Обожаю ваш канал!!))) Всегда очень интересные темы!!!)))))

  • @VASY1PUPKIN2
    @VASY1PUPKIN2 6 лет назад +2

    Аффтар я тебя люблю в хорошем смысле этого слова!!

  • @МихаилШарашин-ъ2ъ
    @МихаилШарашин-ъ2ъ 5 лет назад +2

    Большое спасибо и и жирный лайк за видео! По образу и подобию сделал удаление сообщений, всё работает

    • @АлександрМ-т1й
      @АлександрМ-т1й 4 года назад

      скинь код, как удаление реализовал, пожалуйста

  • @D.P._
    @D.P._ 5 лет назад +1

    Спасибо! Как всегда годные уроки. всегда есть что-то новое. иногда понятное иногда совсем нет, но всегда интересно

  • @NoNameEtcDot
    @NoNameEtcDot 5 лет назад +2

    крутая технология!!! а мы поллинги и пушинги юзали ) спасибо!

  • @АлександрБугримов-о1е

    Вообще супер видео! Спасибо.

  • @ИльяСиротин-ф3ф
    @ИльяСиротин-ф3ф 6 лет назад +4

    Ну как всегда лойс)

  • @maksimdidukh6114
    @maksimdidukh6114 4 года назад +1

    От души душевно в душу (ↄ).

  • @antonfedoruk1037
    @antonfedoruk1037 4 года назад +2

    Ахах, досматривайте видео до последней секунды! Оно того стоит :)

  • @AnnaSmirnova1
    @AnnaSmirnova1 5 лет назад +1

    Аладунь!
    Спасибо огромное!!!!

    • @letsCodeDru
      @letsCodeDru  5 лет назад

      Сразу видно, кто стримы не пропускает XD

  • @noyklgd4403
    @noyklgd4403 6 лет назад +4

    Автору очередные плюсы к карме)

  • @vladvlad8839
    @vladvlad8839 5 лет назад +1

    Супер круто!

  • @vjotov
    @vjotov 6 лет назад +6

    14:00 - в каком моменте и как мы настроили mapping путей?
    16:50 - можно ролик с бэкстейджа - как вычислили что именно там ошибка?
    у меня опечатка получилась - в MessageController вместо аннотация @MessageMapping("/changeMessage") была changeMassage.
    есть вариянт заставить спринг писать в консоль, когда кто то не туда стучится? как при классическим REST когда не найден mapping?

  • @victormog
    @victormog 6 лет назад +3

    Респект!

  • @Sulf8
    @Sulf8 7 месяцев назад

    за grep console спасибо)

  • @D.P._
    @D.P._ 5 лет назад

    Спасибо! Отличный и лаконичный материал!

  • @bek2074
    @bek2074 6 лет назад +19

    Чтобы пройти это урок нужно разобраться в уроке "Настраиваем Webpack", который ссылается на урок "Webpack - сборщик web приложений", который ссылается на урок "Node.js: NPM - пакетный менеджер"...

    • @davronsherbaev9133
      @davronsherbaev9133 4 года назад +1

      Ну, как бы это нормально)

    • @fedorivanhoe3266
      @fedorivanhoe3266 2 года назад

      А у меня и так всё работает, мне вообще gulp больше нравится

  • @Elvolvers
    @Elvolvers 4 года назад

    Спасибо! Кстати для поиска различий между файлами можно использовать Araxis Merge, например.

  • @dmitrysomsin2117
    @dmitrysomsin2117 4 года назад +1

    Спасибо, но это первое видео в котором я не понял 60% информации)

  • @psvm_channel
    @psvm_channel 2 года назад

    Подскажите, как проксировать трафик по вебсокет протоколу в спрингбут приложении? У меня на проекте микросервисная архитектура, в качестве входной точки используется спринг бут приложение, которое аутентифицирует запросы с клиента и проксирует их в другие модули. Между браузером и одним из внутренних модулей нужно установить веб сокет соединение. Подскажете какие-нибудь способы?

  • @VladShtaiier
    @VladShtaiier 2 года назад

    Привет, а обязательно что-бы месседж был именно текстом? Нельзя например сделать вместо просто текста какой-то типу пост, в котором есть титулка, тело и тд. Делая тем самым что-то по типу ленты, которую можно скролить

  • @ВладиславМелехин-е5р
    @ВладиславМелехин-е5р 4 года назад +1

    В конце песня отладчика: "Какого хера, какого хера..." :D

  • @anzheoneanzeone1095
    @anzheoneanzeone1095 5 лет назад +2

    Андрей , спасибо! вопрос у меня такой, сколько раз вы это делали и какое время лично вам нужно чтобы изучить и внедрить что -то новое (даже на примере webcoket, security). Дело в том, что я уже неделю не могу сделать ))) вот хочу понять один я такой или нас много, как быть если начальство скажет сделать такое, а тут такие заторы)

    • @letsCodeDru
      @letsCodeDru  5 лет назад +3

      Когда учился тоже нихренаж не работало. Сейчас уже опыт есть, могу гораздо быстрее разобраться. Это как с машиной: начинаешь на одной и ездишь еле-еле. А потом, с опытом, пофиг на какой и достаточно хорошо катаешь

  • @bassturbatorark
    @bassturbatorark 4 года назад +1

    Удаленные месседжи не пропадают у другого юзера без перезагрузки страницы

  • @МихаилСмирнов-к3р
    @МихаилСмирнов-к3р 6 лет назад +1

    Вопрос по уроку Bean Validation:
    Если по одному полю срабатывает сразу два условия валидации, как в этом случае получить список ошибок?
    При использовании коллекции Map выскакивает ошибка, т.к. появляется второй дублирующий ключ.

  • @nailsaggitarius4212
    @nailsaggitarius4212 4 года назад

    Зря сделали "по-молодежному" теперь затруднения как собрать ваш проект, если например нужно hibernate, который я собрал по вашему же видео и websocket, который теперь собирается совершенно иначе. Слишком крутой входной порог вы сделали.. Извините, конечно, видео отличные, очень доходчивые.

  • @kajmankaiman4896
    @kajmankaiman4896 4 года назад

    Знает кто, как автор сделал так, чтобы у него на 11:30 в логе сокета выводился именно наш энтити пользователя, а не просто id?

  • @GrishaObrazcovV
    @GrishaObrazcovV 6 лет назад +2

    Когда продолжение будет?

  • @vladislavosipenkov1412
    @vladislavosipenkov1412 9 месяцев назад

    А нет видео где stomp но вместо фронта - postman?

  • @antihype3450
    @antihype3450 5 лет назад +2

    КАК исправить? send message не реагирует ,делал все как на видео WebSocketSession[1 current WS(1)-HttpStream(0)-HttpPoll(0), 1 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(1)-CONNECTED(1)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 8, active threads = 0, queued tasks = 0, completed tasks = 12], outboundChannel[pool size = 1, active threads = 0, queued tasks = 0, completed tasks = 1], sockJsScheduler[pool size = 4, active threads = 1, queued tasks = 3, completed tasks = 14]

    • @abaialihan9274
      @abaialihan9274 4 года назад +1

      я с этой проблемой лежу неделю :( новые сообщения не добавляются, старые не редактируется, работает только удаление
      upd: в MessageController в методе change не правильно написал @MessageMapping("/change") . исправил @MessageMapping("/changeMessage")

    • @trygoboi4790
      @trygoboi4790 4 года назад

      @@abaialihan9274 привет. Пожалуйста. Можешь примерно объяснить как реализовывал удаление? И скажу, при удаление, другой пользователь видит это удаление без перезагрузки или только после перезагрузки?

  • @nikopapchenko3726
    @nikopapchenko3726 3 года назад

    Народ подскажите.
    Все делал как по видео, но не отправляет сообщения в форме пользователя, что может быть?

  • @trygoboi4790
    @trygoboi4790 4 года назад

    Здравствуйте. Может кто нибудь поможет с моим вопросом. Так вот вопрос, как сделать обмен сообщениями по конкретному URL. То есть допустим у меня сайт находится на localhost:8080. И я хочу чтобы мой чат через WebSocket открывался только по URL "localhost:8080/chat". Как это сделать? Пробовал @RequestMapping("/chat"). Все равно все открывается на главной странице localhost:8080. Писал по официальному гайду от Спринга. Тут у автора тоже приложение работает на localhost:9000 без дополнительных слов в URL. Надеюсь понятно задал вопрос, заранее большое спасибо

  • @mizantropoff
    @mizantropoff 6 месяцев назад

    В общем , плохо раскрыта тема с маппингами, все эти /changeMessage, /app, /topic/activity, /gs-guide-websocket. Последний воспринимается как какая то обязательная константа, но я переворошил кучу источников - ее можно называть как хочешь, в том числе часто используется тот же мапинг, что и @MessageMapping. Но сейчас не об этом. Почему то не сказано, опять же, если я правильно понял из других источников, , что SockJS - это как раз и есть формирующий очередь сообщений, когда WebSocket по каким то причинам недоступен... И у него как раз есть какой то iFrame, встраиваемый в index
    Хочу понять, что это за фича - нигде не нашел толком описаие, промучился несколько часов. У меня при запуске после авторизации страница загружалась не localhost:8080, а localhost:8080/gs-guide-websocket/*** , с надписью "don't panic, it is for cross-origin magic.
    Проблема возникала еще перед авторизацией - , как я понял, опять же, не сумев подключиться к серверу и создать соединение из за асекьюрити при первом неавторизованном заходе на страницу, уже шла переадресация на /gs-guide-websocket. И после авторизации шел переход на запрашенную перед авторизацией страницу. Как я понял, адрес возникает имменно при создании ws.js
    stompClient = Stomp.over(() => new SockJS('/gs-guide-websocket')).
    Я пробовал его заменить маппингом как у @MessageMapping (много где в интернете так и делается), адрес менялся в адресной строке localhost:8080/changeMessage/***** , но показывался тот же , или вообще непонятно что.
    Последнее что я попробовал сделать - дать доступ в SecuriytFilterChain маппингу /gs-guide-websocket без авторизации . После этого непонятная переадресация прекратилась, и все заработало - уж не знаю, правильно ли нет, визуально вроде да, а вот какие в результате этого могут быть проблемы с безопасностью, или их не возникнет - не знаю.
    Если кто может мне как то разъяснить или кинуть ссылку где доходчиво почитать об этом , буду признателен

  • @oskinnick
    @oskinnick 3 года назад

    Автор, Спасибо огромное! Однако вопрос: при отработке кнопки редактирования в базу тупо добавляется новый Message. sout в контроллере @MessageMapping выводит принятый мессадж без Id. При этом, в консоли хрома отправка айдишника таки происходит... В каком месте Может быть ошибка? Мяф)

    • @letsCodeDru
      @letsCodeDru  3 года назад

      Сложно такое диагностировать через комменты тут. Приходи в чат, там скопом разберемся

    • @oskinnick
      @oskinnick 3 года назад

      @@letsCodeDru Привет!) В чат заходил, кое-что подсказали) Трабл оказался в итоге связан с @MessageMapping - зараза отказывается конвертить Айди из ДжСона. В результате обошел засаду с помощью гiмна та палок - повытаскивал данные руками из JSONObject %)). Однако если ты не против - можно таки поспилкувацца через личку? (Оч хочется разобраться)

  • @r199971
    @r199971 6 лет назад +2

    Почему не ajax? Что тебе так не нравиться Jquery?)

    • @letsCodeDru
      @letsCodeDru  6 лет назад +2

      Jquery провоцирует плохую архитектуру

    • @vjotov
      @vjotov 6 лет назад

      @@letsCodeDru расскажите как нибудь почему и что с Angular и React хуже чем Vue

    • @letsCodeDru
      @letsCodeDru  6 лет назад +1

      @@vjotov с ними всё так. Просто мне больше Vue нравится. На работе использую React. Нынешний ангуляр (2) использовал еще когда он был в глубокой альфе.

    • @СашаБатькович-р9ы
      @СашаБатькович-р9ы 6 лет назад

      @@letsCodeDru а что делаете ?

  • @andreyguzik2675
    @andreyguzik2675 6 лет назад +4

    Ванну нужно закрывать :)

    • @letsCodeDru
      @letsCodeDru  6 лет назад +1

      Тогда кот начинает туда громко ломиться))

    • @andreyguzik2675
      @andreyguzik2675 6 лет назад

      Со временем отвыкнет ^_^

    • @noyklgd4403
      @noyklgd4403 6 лет назад +2

      связывай его скотчем)

  • @axrorbekkuchkarov4146
    @axrorbekkuchkarov4146 5 лет назад

    Здрасвуйте мне надо jwt + websocket, свой укзампл нету? откуда мне искать ? pls help me

    • @letsCodeDru
      @letsCodeDru  5 лет назад +1

      Ещё пока нету. В перспективе должен появиться

  • @ayrat11
    @ayrat11 4 года назад

    Которое видео уже подряд практически ничего по спрингу - один фронтенд на джаваскрипте. Переименуйте уже тогда уроки в изучение фронта.

  • @СтаниславБарышников-у6е

    Спасибо за отличное видео!

  • @D.P._
    @D.P._ 5 лет назад

    Спасибо! Отличный и лаконичный материал!

  • @D.P._
    @D.P._ 5 лет назад

    Спасибо! Отличный и лаконичный материал!

  • @D.P._
    @D.P._ 5 лет назад

    Спасибо! Отличный и лаконичный материал!

  • @D.P._
    @D.P._ 5 лет назад

    Спасибо! Отличный и лаконичный материал!

  • @D.P._
    @D.P._ 5 лет назад

    Спасибо! Отличный и лаконичный материал!

  • @D.P._
    @D.P._ 5 лет назад +1

    Спасибо! Отличный и лаконичный материал!

  • @D.P._
    @D.P._ 5 лет назад +2

    Спасибо! Отличный и лаконичный материал!