Я хочу использовать клиент-серверный протокол для передачи данных клиентам, которые всегда будут оставаться на связи, 24/7.
HTTP - это хороший клиент-серверный протокол общего назначения. Я не думаю, что семантика может сильно отличаться для любого другого протокола, и существует много хороших HTTP-серверов.
Критическим фактором является количество подключений: приложение будет постепенно масштабироваться до очень большого числа клиентов, скажем, до 100 000. Они не могут быть серверами, поскольку имеют динамические IP-адреса и могут находиться за брандмауэрами. Таким образом, ссылка на сокет должна быть установлена и сохранена, что приводит нас к HTTP push. Лишь в редких случаях данные фактически будут передаваться данному клиенту, поэтому мы также хотим минимизировать издержки соединения.
Сервер должен справиться с этим, приняв соединение, вставив удаленный IP-адрес и порт в таблицу и оставив его бездействующим. Нам не нужно запускать 100 000 потоков, просто столько записей таблиц и файловых дескрипторов.
Есть ли способ достичь этого, используя готовый HTTP-сервер, без записи на уровне сокетов?