necesito para conectar a miles de clientes a través de TCP en un protocolo propietario para adquirir datos de forma cíclica. Necesito escribir una aplicación de servidor .NET en C#.sondeo a través de miles de sockets TCP
El primer intento fue crear para cada socket TCP de un hilo propio, que funciona, pero necesita una gran cantidad de uso de la CPU.
supe que sería una idea mejor utilizar el threadpool .NET en su lugar. Por lo que tengo entendido (http://msdn.microsoft.com/en-us/library/ms973903.aspx) podría usar temporizadores para que cada socket adquiera los datos cíclicamente en un período determinado (como 1 segundo). Esto no funciona para mí porque los enchufes se agotan una vez que se abrió la conexión porque hay muchos más enchufes que deben abrirse antes de que los receptáculos abiertos vuelvan a girar.
Otro intento fue utilizar devoluciones de llamada asincrónicas. Esto funcionaría para mí, pero no sé cómo conseguir que los enchufes adquieran datos cíclicamente ???
Las palabras "miles" e "hilos" no van de la mano. Intente ver si puede usar la palabra clave 'await' para las continuaciones, esto le permitirá escribir código contra los puertos de bloqueo sin que el código realmente bloquee con mucha frecuencia. Este es el tipo de principio detrás de Erlang y Stackless Python: dos lenguajes creados específicamente para la concurrencia de redes. –
¿Por qué debe hacer un ciclo entre los clientes para adquirir datos? Sería más simple (aunque es relativo) mantener solo una lectura asíncrona publicada en cada socket y procesar los datos a medida que llegan. Si realmente necesita lecturas cíclicas, podría posponer el reenvío de una lectura asíncrona hasta que se hayan enviado todos los demás enchufes. –
simplemente no sondee. –