Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно выбрать реализацию / 18 сообщений из 18, страница 1 из 1
12.02.2019, 09:34
    #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
12.02.2019, 09:39
    #39772615
qi_ip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выбрать реализацию
Еще, как вариант, чтобы от online клиента, каждые 5 секунд шел запрос, в ответ на который отдавать сообщение.
...
Рейтинг: 0 / 0
12.02.2019, 10:28
    #39772645
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выбрать реализацию
qi_ipперебором отправлять каждому сообщение, походу обрабатывая ответы. Но этот вариант долгийсколько в цифрах слово Долгий?
...
Рейтинг: 0 / 0
12.02.2019, 10:49
    #39772664
qi_ip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выбрать реализацию
Petro123, от 3 до 5-8 секунд
...
Рейтинг: 0 / 0
12.02.2019, 11:25
    #39772692
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выбрать реализацию
qi_ip,
Не каждому поток, пул потоков. Уже давно даже в первом классе проходят.
Ну или не велосипед, готовую либу для этих сообщений.
...
Рейтинг: 0 / 0
12.02.2019, 12:59
    #39772763
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выбрать реализацию
qi_ip, а каким образом клиент подтверждает получение? Что то подтверждает клиент вручную ?
...
Рейтинг: 0 / 0
12.02.2019, 14:41
    #39772859
qi_ip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выбрать реализацию
Озверинqi_ip, а каким образом клиент подтверждает получение? Что то подтверждает клиент вручную ?
Нет, клиентское ПО получает сообщение, сохраняет у себя локально и возвращает статус, что все получено.
...
Рейтинг: 0 / 0
12.02.2019, 14:50
    #39772870
qi_ip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выбрать реализацию
Petro123qi_ip,
готовую либу для этих сообщений.
Просветите о чем речь!?
...
Рейтинг: 0 / 0
12.02.2019, 15:00
    #39772882
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно выбрать реализацию
qi_ipОзверинqi_ip, а каким образом клиент подтверждает получение? Что то подтверждает клиент вручную ?
Нет, клиентское ПО получает сообщение, сохраняет у себя локально и возвращает статус, что все получено.

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

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

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

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

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



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

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

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

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

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


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