Подключаем 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/...
Видосу уже скоро пять лет, но всё ещё полезный. Спасибо)
Андрей, большое спасибо за все твои видео, отлично объясняешь!
Ни один урок не обходится без последствий, если просто выполнить особо не вдумываясь то ничего не отложится. Я вот попытался разобраться, застрял на 2 часа, никак не мог понять что происходить в handlers, все виной тому, что в java не сталкивался с функциональным программированием, и только потом понял что в handlers ложатся не объекты, а функции которым в последствии передаются сообщения из сервера, зачем такая примудрость пока не разобрался (в будущем думаю пойму) но блин в мозгу отложилось надежно. В очередной раз спасибо за видео, в каждом новом уроке новая технология, которая заставляет разбираться и развиваться. Удачи автору.
Спасибо тебе, добрый человек. Тоже голову ломал над этим.
На одном дыхании
Круть крутяшная!!!!! Респект, вот чего хотелось-то попробовать))) С нетерпением жду продолжения!!!
Андрей спасибо огромное!!!))) Обожаю ваш канал!!))) Всегда очень интересные темы!!!)))))
Аффтар я тебя люблю в хорошем смысле этого слова!!
Большое спасибо и и жирный лайк за видео! По образу и подобию сделал удаление сообщений, всё работает
скинь код, как удаление реализовал, пожалуйста
Спасибо! Как всегда годные уроки. всегда есть что-то новое. иногда понятное иногда совсем нет, но всегда интересно
крутая технология!!! а мы поллинги и пушинги юзали ) спасибо!
Вообще супер видео! Спасибо.
Ну как всегда лойс)
От души душевно в душу (ↄ).
Ахах, досматривайте видео до последней секунды! Оно того стоит :)
Аладунь!
Спасибо огромное!!!!
Сразу видно, кто стримы не пропускает XD
Автору очередные плюсы к карме)
Супер круто!
14:00 - в каком моменте и как мы настроили mapping путей?
16:50 - можно ролик с бэкстейджа - как вычислили что именно там ошибка?
у меня опечатка получилась - в MessageController вместо аннотация @MessageMapping("/changeMessage") была changeMassage.
есть вариянт заставить спринг писать в консоль, когда кто то не туда стучится? как при классическим REST когда не найден mapping?
Респект!
за grep console спасибо)
Спасибо! Отличный и лаконичный материал!
Чтобы пройти это урок нужно разобраться в уроке "Настраиваем Webpack", который ссылается на урок "Webpack - сборщик web приложений", который ссылается на урок "Node.js: NPM - пакетный менеджер"...
Ну, как бы это нормально)
А у меня и так всё работает, мне вообще gulp больше нравится
Спасибо! Кстати для поиска различий между файлами можно использовать Araxis Merge, например.
Спасибо, но это первое видео в котором я не понял 60% информации)
Подскажите, как проксировать трафик по вебсокет протоколу в спрингбут приложении? У меня на проекте микросервисная архитектура, в качестве входной точки используется спринг бут приложение, которое аутентифицирует запросы с клиента и проксирует их в другие модули. Между браузером и одним из внутренних модулей нужно установить веб сокет соединение. Подскажете какие-нибудь способы?
Привет, а обязательно что-бы месседж был именно текстом? Нельзя например сделать вместо просто текста какой-то типу пост, в котором есть титулка, тело и тд. Делая тем самым что-то по типу ленты, которую можно скролить
В конце песня отладчика: "Какого хера, какого хера..." :D
Андрей , спасибо! вопрос у меня такой, сколько раз вы это делали и какое время лично вам нужно чтобы изучить и внедрить что -то новое (даже на примере webcoket, security). Дело в том, что я уже неделю не могу сделать ))) вот хочу понять один я такой или нас много, как быть если начальство скажет сделать такое, а тут такие заторы)
Когда учился тоже нихренаж не работало. Сейчас уже опыт есть, могу гораздо быстрее разобраться. Это как с машиной: начинаешь на одной и ездишь еле-еле. А потом, с опытом, пофиг на какой и достаточно хорошо катаешь
Удаленные месседжи не пропадают у другого юзера без перезагрузки страницы
Вопрос по уроку Bean Validation:
Если по одному полю срабатывает сразу два условия валидации, как в этом случае получить список ошибок?
При использовании коллекции Map выскакивает ошибка, т.к. появляется второй дублирующий ключ.
Зря сделали "по-молодежному" теперь затруднения как собрать ваш проект, если например нужно hibernate, который я собрал по вашему же видео и websocket, который теперь собирается совершенно иначе. Слишком крутой входной порог вы сделали.. Извините, конечно, видео отличные, очень доходчивые.
Знает кто, как автор сделал так, чтобы у него на 11:30 в логе сокета выводился именно наш энтити пользователя, а не просто id?
Когда продолжение будет?
А нет видео где stomp но вместо фронта - postman?
КАК исправить? 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]
я с этой проблемой лежу неделю :( новые сообщения не добавляются, старые не редактируется, работает только удаление
upd: в MessageController в методе change не правильно написал @MessageMapping("/change") . исправил @MessageMapping("/changeMessage")
@@abaialihan9274 привет. Пожалуйста. Можешь примерно объяснить как реализовывал удаление? И скажу, при удаление, другой пользователь видит это удаление без перезагрузки или только после перезагрузки?
Народ подскажите.
Все делал как по видео, но не отправляет сообщения в форме пользователя, что может быть?
Здравствуйте. Может кто нибудь поможет с моим вопросом. Так вот вопрос, как сделать обмен сообщениями по конкретному URL. То есть допустим у меня сайт находится на localhost:8080. И я хочу чтобы мой чат через WebSocket открывался только по URL "localhost:8080/chat". Как это сделать? Пробовал @RequestMapping("/chat"). Все равно все открывается на главной странице localhost:8080. Писал по официальному гайду от Спринга. Тут у автора тоже приложение работает на localhost:9000 без дополнительных слов в URL. Надеюсь понятно задал вопрос, заранее большое спасибо
В общем , плохо раскрыта тема с маппингами, все эти /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 без авторизации . После этого непонятная переадресация прекратилась, и все заработало - уж не знаю, правильно ли нет, визуально вроде да, а вот какие в результате этого могут быть проблемы с безопасностью, или их не возникнет - не знаю.
Если кто может мне как то разъяснить или кинуть ссылку где доходчиво почитать об этом , буду признателен
Автор, Спасибо огромное! Однако вопрос: при отработке кнопки редактирования в базу тупо добавляется новый Message. sout в контроллере @MessageMapping выводит принятый мессадж без Id. При этом, в консоли хрома отправка айдишника таки происходит... В каком месте Может быть ошибка? Мяф)
Сложно такое диагностировать через комменты тут. Приходи в чат, там скопом разберемся
@@letsCodeDru Привет!) В чат заходил, кое-что подсказали) Трабл оказался в итоге связан с @MessageMapping - зараза отказывается конвертить Айди из ДжСона. В результате обошел засаду с помощью гiмна та палок - повытаскивал данные руками из JSONObject %)). Однако если ты не против - можно таки поспилкувацца через личку? (Оч хочется разобраться)
Почему не ajax? Что тебе так не нравиться Jquery?)
Jquery провоцирует плохую архитектуру
@@letsCodeDru расскажите как нибудь почему и что с Angular и React хуже чем Vue
@@vjotov с ними всё так. Просто мне больше Vue нравится. На работе использую React. Нынешний ангуляр (2) использовал еще когда он был в глубокой альфе.
@@letsCodeDru а что делаете ?
Ванну нужно закрывать :)
Тогда кот начинает туда громко ломиться))
Со временем отвыкнет ^_^
связывай его скотчем)
Здрасвуйте мне надо jwt + websocket, свой укзампл нету? откуда мне искать ? pls help me
Ещё пока нету. В перспективе должен появиться
Которое видео уже подряд практически ничего по спрингу - один фронтенд на джаваскрипте. Переименуйте уже тогда уроки в изучение фронта.
Спасибо за отличное видео!
Спасибо! Отличный и лаконичный материал!
Спасибо! Отличный и лаконичный материал!
Спасибо! Отличный и лаконичный материал!
Спасибо! Отличный и лаконичный материал!
Спасибо! Отличный и лаконичный материал!
Спасибо! Отличный и лаконичный материал!
Спасибо! Отличный и лаконичный материал!