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