Приветствую
Есть приложение с диалогами между пользователями 1 на 1. Как при открытой вкладке чата обновлять диалог с минимальными затратами серверных ресурсов?
Например, как у ВК, диалог открыт и обновления в диалоге приходят сразу (ну почти, пару секунд задержка)
Можно использовать longpoll? можно websocket?
Может быть есть еще что-то, что я упустил?
Может быть есть какое-то готовое решение?
Как распределять нагрузку, если соединений много? (теоретически предположим 100.000 - 1.000.000 активных клиентов)
не ухожу в подробности, просто буду крайне благодарен за ваше мнение относительно того, как бы вы организовали обновление новых сообщений и изменение статуса отправленных
Планирую сделать вот так:
клиент подключается к случайному websocket-серверу, который имеют постоянное соединение с tcp-сервером (на каждое подключение ws отдельный поток), который уже в свою очередь имеет одно постоянное подключение к бд.
этот событийный tcp-сервер по середине является прослойкой для защиты от нагрузки к бд.
Извините , но я не понимаю, что Вы конкретно хотите.
Как клиенту общаться с сервером, чтобы минимизировать нагрузку на сервер и было
оперативно ? Для этого код серверной части не нужен.
Чтобы держало миллион диалогов , вот телеграм он держит больше.
Исходники 35м в архиве и не чего не понятно ?
Тогда попроще.
Оперативность можно переложить на FCC
Отзывчивость обеспечивается кешем диалогов.
Обновления запрашивать при открытии чата.
По ответу от апи обновлять.
Раз 5-10 минут дергать сервак из фоновой службы, а не потерялись ли FCC уведомления.
Посмотрите мой проект https://github.com/CppComet/comet-server и его презентацию там примерно как вы описали в комментарии то что вы хотите сделать, но на С++ и каждое соединение не порождает поток а обрабатывается асинхронно в пуле из нескольких заранее созданных потоков.
И ещё есть апи для интеграции всего с вашей бизнес логикой.
И бд не опрашивается каждым подписчиком что сильно экономит нагрузку.