Вопрос: Как правильно выбрать реализацию
Приветствую!
Подскажите, как правильно продумать механизм доставки сообщений.
Есть сокет сервер (чат-сервер), к которому подключаются клиенты. 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>)
Какие еще есть оптимальные варианты доставки по времени.
Спасибо!