Я нахожусь в стадии разработки, когда пишу новое приложение-службу Windows, которое принимает соединения TCP / IP для длительных соединений (т. Е. Это не HTTP, где много коротких соединений, а клиент подключается и остается подключенным в течение нескольких часов). или дни или даже недели).
Я ищу идеи для лучшего способа проектирования сетевой архитектуры. Мне нужно будет запустить хотя бы один поток для сервиса. Я рассматриваю возможность использования Asynch API (BeginRecieve и т. Д.), Поскольку я не знаю, сколько клиентов я подключу в любой момент времени (возможно, сотни). Я определенно не хочу запускать поток для каждого соединения.
Данные в основном будут поступать клиентам с моего сервера, но иногда от клиентов будут отправляться некоторые команды. В первую очередь это приложение для мониторинга, в котором мой сервер периодически отправляет данные о состоянии клиентам.
Есть предложения о том, как сделать это максимально масштабируемым? Основной рабочий процесс? Спасибо.
РЕДАКТИРОВАТЬ: Для ясности, я ищу решения на основе .net (если возможно, C #, но любой язык .net будет работать)
ЗАМЕТКА ПРИМЕЧАНИЕ: Чтобы получить награду, я ожидаю большего, чем простой ответ. Мне нужен рабочий пример решения, либо как указатель на что-то, что я могу загрузить, либо как короткий пример в строке. И он должен быть основан на .net и Windows (любой язык .net приемлем)
РЕДАКТИРОВАТЬ: Я хочу поблагодарить всех, кто дал хорошие ответы. К сожалению, я мог принять только один, и я решил принять более известный метод Begin / End. Решение Esac вполне может быть лучше, но оно все еще достаточно новое, и я не знаю точно, как оно будет работать.
Я проголосовал за все ответы, которые я считаю хорошими, я хотел бы сделать больше для вас, ребята. Еще раз спасибо.