|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
Приветствую! Подскажите, как правильно продумать механизм доставки сообщений. Есть сокет сервер (чат-сервер), к которому подключаются клиенты. 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>) Какие еще есть оптимальные варианты доставки по времени. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 09:34 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
Еще, как вариант, чтобы от online клиента, каждые 5 секунд шел запрос, в ответ на который отдавать сообщение. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 09:39 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
qi_ipперебором отправлять каждому сообщение, походу обрабатывая ответы. Но этот вариант долгийсколько в цифрах слово Долгий? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 10:28 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
Petro123, от 3 до 5-8 секунд ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 10:49 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
qi_ip, Не каждому поток, пул потоков. Уже давно даже в первом классе проходят. Ну или не велосипед, готовую либу для этих сообщений. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 11:25 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
qi_ip, а каким образом клиент подтверждает получение? Что то подтверждает клиент вручную ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 12:59 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
Озверинqi_ip, а каким образом клиент подтверждает получение? Что то подтверждает клиент вручную ? Нет, клиентское ПО получает сообщение, сохраняет у себя локально и возвращает статус, что все получено. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 14:41 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
Petro123qi_ip, готовую либу для этих сообщений. Просветите о чем речь!? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 14:50 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
qi_ipОзверинqi_ip, а каким образом клиент подтверждает получение? Что то подтверждает клиент вручную ? Нет, клиентское ПО получает сообщение, сохраняет у себя локально и возвращает статус, что все получено. и, как я понимаю, все это у вас реализовано на сокетах поверх tcp протокола? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 15:00 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
Озверин, да ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 15:32 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
qi_ipОзверин, да а сокеты - блокирующие или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 15:38 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
Озверинqi_ipОзверин, да а сокеты - блокирующие или нет? Сокеты не блокирующие ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 15:55 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
qi_ipКакие еще есть оптимальные варианты доставки по времени. Взять kafka и не изобретать очередной велосипед. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 16:17 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
qi_ip, а если человек пишет не другому а всем - у вас никак не реализовано что ли? А код броадкаст сообщения у вас что то типа такого: Код: java 1. 2. 3.
? И это работает по 3-5 секунд на 1000 клиентов? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 16:58 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
Вообщем совет простой - сделайте свой чат сервер поверх нетти и не парьтесь. Пример, тут - https://github.com/zhanggang807/Netty-Chat/tree/master/src/main/java/org/dean/example/nettychat ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 17:19 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
Alexey Tominqi_ipКакие еще есть оптимальные варианты доставки по времени. Взять kafka и не изобретать очередной велосипед. Кафка громоздкое решение плюс долго с API разбираться. WebSocket server вполне так хорош для бродкаста на пару сотен юзеров если речь идет об отработки идеи и для собственной самооценки. В продакшин я бы всеж предпочел месседж брокер: kafka или rabbitmq. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 23:56 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
Давайте не будем "втаскивать" сюда Кафку. Это не простой фреймворк и нужно потратить время на его освоение. А поскольку в топике автор говорит об очень базовых вещах (Threads, Sockets) то можно предположить что у него задача либо должна демонстрировать работу сокетов и тредов (что-то учебное) либо он (автор) сам учится и ему прост это любопытно. Если это бизнес-задача то она формулируется совсем в других понятиях и в других терминах. Например - в терминах предметной области. Клиент. Платеж. и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 00:57 |
|
Как правильно выбрать реализацию
|
|||
---|---|---|---|
#18+
qi_ipПодскажите, как правильно продумать механизм доставки сообщений.странный вопрос. Любой hello world гугле. автор/* Вы что-то хотели сказать? Введите это здесь: Алло, сервер? Ты меня слышишь? Привет, это Сервер! Подтверждаю, вы написали : Алло, сервер? Ты меня слышишь? Клиент был закрыт... */ Ура! Мы научили сервер общаться с клиентом! https://javarush.ru/groups/posts/654-klassih-socket-i-serversocket-ili-allo-server-tih-menja-slihshishjh Ну и базу добавить для офф лайна. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 07:32 |
|
|
start [/forum/topic.php?fid=59&msg=39773124&tid=2121483]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 166ms |
0 / 0 |