Как написать масштабируемый сервер на основе Tcp / Ip


Я нахожусь на стадии разработки написания нового приложения Службы Windows, которое принимает TCP / IP-соединения для длительных подключений (т. е. это не похоже на HTTP, где есть много коротких подключений, а скорее клиент подключается и остается подключенным в течение нескольких часов или дней или даже недель).

Я ищу идеи для проектирования сетевой архитектуры. Мне нужно будет запустить хотя бы один поток для службы. Я рассматриваю возможность использования API Asynch (BeginRecieve и др..) поскольку я не знаю, сколько клиентов я подключу в любой момент времени (возможно, сотни). Я определенно не хочу запускать поток для каждого соединения.

данные в основном будут поступать клиентам с моего сервера, но иногда будут отправляться некоторые команды от клиентов. Это в первую очередь приложение мониторинга, в котором мой сервер периодически отправляет данные о состоянии клиентам.

любые предложения о лучшем способе сделать это как можно масштабировать? Основной рабочий процесс? Спасибо.

EDIT: чтобы быть ясным, я ищу решения на основе .net (C#, если это возможно, но любой язык .net будет работать)

щедрость Примечание: чтобы получить награду, я ожидаю больше, чем простой ответ. Мне понадобится рабочий пример решения, либо как указатель на что-то, что я мог бы загрузить, либо короткий пример в строке. И это должно быть .net и Windows на основе (любой язык .net является приемлемым)

EDIT: I хотим поблагодарить всех, кто дал хорошие ответы. К сожалению, я мог принять только один, и я решил принять более известный метод начала/конца. Решение Esac вполне может быть лучше, но оно все еще достаточно новое, что я не знаю точно, как это будет работать.

Я поддержал все ответы, которые я думал, были хороши, я хотел бы сделать больше для вас, ребята. Спасибо снова.

18 142

18 ответов: