powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно выбрать реализацию
18 сообщений из 18, страница 1 из 1
Как правильно выбрать реализацию
    #39772613
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую!

Подскажите, как правильно продумать механизм доставки сообщений.

Есть сокет сервер (чат-сервер), к которому подключаются клиенты. 1 клиент - 1 соединение.
При общении - все понятно, один клиент пишет другому - сообщение по Id отправляется.

Есть нюанс. Каждый определенный период времени формируются сообщения, которые нужно разослать только тем пользователям, которые в статусе Online. Причем, необходимо соблюсти обязательный порядок доставки.

То есть, например, за час было сгенерировано 5 сообщений: msg1, msg2, msg3, msg4, msg5.
User1 стал online. Сервер посылает ему msg1, User1 подтвердил получение сообщения, сервер посылает ему msg2 и так далее.

Если в какой-то момент, User1 не подтвердил доставку msg2, то через 5 секунд, ему повторно отсылается msg2 и так до тех пор, пока User1 не подтвердит что получил msg2.

Один из вариантов, перед каждой отправкой (каждые 5 секунд), брать список онлайн пользователей и перебором отправлять каждому сообщение, походу обрабатывая ответы. Но этот вариант долгий, так как если слишком много online пользователей, последний получит сообщение очень поздно, а время доставки тут тоже критично.

Или для каждого пользователя создавать отдельный Thread и в нем работать. Но тогда есть вариант, что будет слишком много одновременных потоков (1000>)

Какие еще есть оптимальные варианты доставки по времени.

Спасибо!
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39772615
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще, как вариант, чтобы от online клиента, каждые 5 секунд шел запрос, в ответ на который отдавать сообщение.
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39772645
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipперебором отправлять каждому сообщение, походу обрабатывая ответы. Но этот вариант долгийсколько в цифрах слово Долгий?
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39772664
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123, от 3 до 5-8 секунд
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39772692
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip,
Не каждому поток, пул потоков. Уже давно даже в первом классе проходят.
Ну или не велосипед, готовую либу для этих сообщений.
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39772763
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip, а каким образом клиент подтверждает получение? Что то подтверждает клиент вручную ?
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39772859
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Озверинqi_ip, а каким образом клиент подтверждает получение? Что то подтверждает клиент вручную ?
Нет, клиентское ПО получает сообщение, сохраняет у себя локально и возвращает статус, что все получено.
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39772870
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123qi_ip,
готовую либу для этих сообщений.
Просветите о чем речь!?
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39772882
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipОзверинqi_ip, а каким образом клиент подтверждает получение? Что то подтверждает клиент вручную ?
Нет, клиентское ПО получает сообщение, сохраняет у себя локально и возвращает статус, что все получено.

и, как я понимаю, все это у вас реализовано на сокетах поверх tcp протокола?
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39772909
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Озверин, да
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39772913
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipОзверин, да

а сокеты - блокирующие или нет?
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39772926
qi_ip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Озверинqi_ipОзверин, да

а сокеты - блокирующие или нет?
Сокеты не блокирующие
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39772933
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipКакие еще есть оптимальные варианты доставки по времени.

Взять kafka и не изобретать очередной велосипед.
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39772952
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ip, а если человек пишет не другому а всем - у вас никак не реализовано что ли? А код броадкаст сообщения у вас что то типа такого:

Код: java
1.
2.
3.
for (Channel channel : channels) {
                channel.write("[" + incoming.remoteAddress() + "]" + s + "\n");
        }



? И это работает по 3-5 секунд на 1000 клиентов?
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39772966
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем совет простой - сделайте свой чат сервер поверх нетти и не парьтесь.
Пример, тут - https://github.com/zhanggang807/Netty-Chat/tree/master/src/main/java/org/dean/example/nettychat
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39773096
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tominqi_ipКакие еще есть оптимальные варианты доставки по времени.

Взять kafka и не изобретать очередной велосипед.

Кафка громоздкое решение плюс долго с API разбираться. WebSocket server вполне так хорош для бродкаста на пару сотен юзеров если речь идет об отработки идеи и для собственной самооценки. В продакшин я бы всеж предпочел месседж брокер: kafka или rabbitmq.
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39773100
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте не будем "втаскивать" сюда Кафку. Это не простой фреймворк и нужно потратить
время на его освоение. А поскольку в топике автор говорит об очень базовых вещах (Threads, Sockets)
то можно предположить что у него задача либо должна демонстрировать работу сокетов и тредов
(что-то учебное) либо он (автор) сам учится и ему прост это любопытно.

Если это бизнес-задача то она формулируется совсем в других понятиях и в других терминах.
Например - в терминах предметной области. Клиент. Платеж. и т.п.
...
Рейтинг: 0 / 0
Как правильно выбрать реализацию
    #39773124
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qi_ipПодскажите, как правильно продумать механизм доставки сообщений.странный вопрос.
Любой hello world гугле.
автор/*
Вы что-то хотели сказать? Введите это здесь:
Алло, сервер? Ты меня слышишь?
Привет, это Сервер! Подтверждаю, вы написали : Алло, сервер? Ты меня слышишь?
Клиент был закрыт...
*/

Ура! Мы научили сервер общаться с клиентом!
https://javarush.ru/groups/posts/654-klassih-socket-i-serversocket-ili-allo-server-tih-menja-slihshishjh
Ну и базу добавить для офф лайна.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно выбрать реализацию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]