Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 1
Регистрация: 04.04.2017
Сообщений: 59

Интеграция чата в Spring MVC приложение

21.08.2018, 20:58. Показов 2074. Ответов 0

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
Решил на днях написать простенький аналог социальной сети на Java + Spring.
Сделал все основные фичи и застопорился на создании чата. Так как http протокол не является дюплексным, решил искать лазейки. Порывшись в интернете пришел к выводу, что можно все это реализовать с помощью WebSocket'а.
Решил сделать следующий алгоритм:
1) Пользователь авторизуется на сайте
2) Клиент с помощью jQuery создает сокет, тем самым "регистрируя" пользователя, т.е.:
Java
1
2
3
4
5
6
7
8
9
10
     private static Map<String, WebSocketSession> onlineUsers = new ConcurrentHashMap<>();
 
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        if (onlineUsers.containsKey(session.getPrincipal().getName()))
            return;
        super.afterConnectionEstablished(session);
        String name = session.getPrincipal().getName();
        onlineUsers.put(name, session);
    }
Вот так выглядит часть моего handler'а. То есть как только соединение устанавливается, имя пользователя с его сессией заносится в мапу. Я это сделал, чтобы в дальнейшем, когда пользователь A захочет отправить сообщение пользователю B, этот хандлер по имени пользователя B достал его сессию и отправил по ней ему сообщение. Мне такой способ казался крайне логичным, хотя чем дальше я углубляюсь, тем больше вопросов у меня появляется. Например, я вошел в мое приложение с двух девайсов на разные аккаунты, открыл диалоговое окно, отправил сообщение с одного пользователя другому, сообщение пришло не сервер, нашло получателя(!!!), отправило письмо, НО письмо до получателя так и не доходит. И это еще малейшая из моих проблем.
Вторая проблема которая мне встретится 100% после решения первой намного сложнее. Предположим пользователь A открыл диалоговое окно с пользователем B и отправил ему сообщение, в это время пользователь B НЕ находится в диалогом окне с пользователем A, а, скажем, хочет переписываться с пользователем C. Мой код в jQuery на обработку входящих сообщений выглядит так:
Java
1
2
3
4
5
6
7
8
9
10
webSocket.onmessage = function (evt) {
                var message = evt.data;
                $("#history").append("<div class=\"container darker\">\n" +
                    "  <img src=\"/profile/get_avatar/?name=" + name + "\" alt=\"Avatar\">\n" +
                    "  <p>" + message + "</p>\n" +
                    "  <span  class=\"time-left\">" + date.getHours() + ":" + date.getMinutes() + "</span>\n" +
                    "</div>");
                var block = document.getElementById("history");
                block.scrollTop = block.scrollHeight;
            };
Это значит, что клиенту пофиг в каком окне я нахожусь, он просто добавит входящее сообщение в текущую историю.

В общем, все это выглядит как страшный запутанный лабиринт. Чем дальше, тем больше ошибок.
От вас я хочу узнать следующее. Если мой ход мыслей верный, то куда дальше капать? Дайте пожалуйста пару советов. Или же, если все что я затеял с этими сокетами фигня, посоветуйте какой-нибудь другой способ интегрировать чат в Spring приложение. Может кто-то сталкивался с похожей проблемой.
P.S: я находил некоторые проекты, где на Spring BOOT реализован похожий функционал, но я пишу на чистом Spring'е и не смог подстроить тот код под свое приложение.
Заранее вам благодарен!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.08.2018, 20:58
Ответы с готовыми решениями:

Интеграция Java Spring MVC и ExtJS 6
Стоит задача интегрировать или состыковать небольшой проект Spring MVC и ExtJS 6. В качестве примера предлагается ...

Не запускается простейшее приложение на Spring MVC Maven Intellij Idea
Помогите пожалуйста запустить простейший проект на Spring. Настройки web.xml &lt;?xml version=&quot;1.0&quot;...

Spring MVC. 404 ошибка при включении Spring Data JPA в проект
Добрый день. Есть простой шаблонный проект с использованием Spring MVC и Maven. С зависимостями Spring MVC проект собирается нормально и...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.08.2018, 20:58
Помогаю со студенческими работами здесь

Перевод проекта из Spring Maven в обычный Spring MVC
Здравствуйте. Подскажите, реально ли взять готовый проект, например -...

задания по spring core и spring mvc для новичков
Какие задания можно предложить новичкам для выполнения после знакомства их с spring core и mvc ?

Jetty embedded + Spring MVC + Spring Security
Добрый день. По роду работы приходилось писать на JavaSE, в том числе и сложные клиент/серверные программы. Использовал Netty, Apache...

Spring mvc spring jdbc
Простое веб приложение с использованием Spring mvc + jdbc(JdbcTemplate). Можно добавить запись в таблицу или вывести список данных из...

Spring MVC, Spring REST
Всем привет! Изучаю фреймворк Spring и возникло несколько вопросов в процессе, на которые не уверен однозначно, что до конца понимаю....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru