How to write a scalable Tcp/Ip based serve

Estou na fase de design ao escrever um novo aplicativo de Serviço do Windows que aceita conexões TCP / IP para conexões de longa execução (isto é, não é como HTTP, onde há muitas conexões curtas, mas um cliente se conecta e permanece conectado por horas ou dias ou até semanas).

Estou procurando idéias para a melhor maneira de projetar a arquitetura de rede. Vou precisar iniciar pelo menos um segmento para o serviço. Estou pensando em usar a API Asynch (BeginRecieve, etc.), pois não sei quantos clientes terei conectado a qualquer momento (possivelmente centenas). Definitivamente, não quero iniciar um thread para cada conexã

@Data fluirá principalmente para os clientes do meu servidor, mas haverá alguns comandos enviados pelos clientes ocasionalmente. Esse é principalmente um aplicativo de monitoramento no qual meu servidor envia dados de status periodicamente para os cliente

Alguma sugestão sobre a melhor maneira de tornar isso o mais escalável possível? Fluxo de trabalho básico? Obrigado

EDIT: Para ser claro, estou procurando soluções baseadas em .net (c #, se possível, mas qualquer idioma .net funcionará)

OTA NOTA: Para receber a recompensa, espero mais do que uma resposta simples. Eu precisaria de um exemplo prático de uma solução, como um ponteiro para algo que eu poderia baixar ou um pequeno exemplo em linha. E deve ser baseado em .net e Windows (qualquer idioma .net é aceitável)

EDIT: Quero agradecer a todos que deram boas respostas. Infelizmente, só pude aceitar um e escolhi aceitar o método Begin / End mais conhecido. A solução da Esac pode muito bem ser melhor, mas ainda é nova o suficiente para que eu não saiba ao certo como vai funciona

Eu votei todas as respostas que achei boas, gostaria de poder fazer mais por vocês. Obrigado novamente

questionAnswers(18)

yourAnswerToTheQuestion