1 и 2 понятно
Ferroman
3. Клиентам посылается запрос на получение изменений
Как отослать клиенту запрос? Предполагается, что соединение активно(сокет открыт) и клиент ждет этого запроса recv() в отдельном потоке.
Если так, то может быть сразу попытаться отослать ему изменения, а затем прикладной логикой на сервере и на клиенте оптимизировать интенсивность передачи. Т.е. если данные совсем не отправляются в течение определенного времени, то закрыть соединение, а клиенту при следующем коннекте урезать квоту на подписку. При разрыве соединения на строне клиента также автоматически уменьшается квота(жадность запроса). Так, мне кажется, можно обойтись без пункта 3. Всё равно ресурс сервера уже использован и нет смысла задерживать готовый результат.
Эти обновления нужны для того, чтобы клиент видел самые актуальные данные.
Если с его стороны связь плохая, то это проблема клиента и ему нужно уменьшить запросы.
Может быть в ряде случаев, когда прием не очень критичен, вообще UDP отсылать?