2010-08-09 23 views
6

Sé que en Java, cuando desea crear un servidor de alto rendimiento, utiliza nio en lugar del socket normal. Entonces, ¿existe algo para C# para crear servidores de alto rendimiento?C# ==> ¿Servidor de alto rendimiento?

+1

Vi esto recientemente que puede resultarle interesante: http://developers.slashdot.org/story/10/07/27/1925209/Java-IO-Faster-Than-NIO – AaronLS

+0

@AaronLS: parece que nio es una biblioteca de socket asíncrona, mientras que los conectores de .NET funcionan en ambos sentidos. –

+2

Las clases de socket van a ser las mismas en .NET independientemente del idioma, así que cambié las etiquetas. –

Respuesta

11

Sí, SocketAsyncEventArgs:

La clase SocketAsyncEventArgs es parte de un conjunto de mejoras a la clase System.Net.Sockets.Socket que proporcionar un patrón alternativo asíncrono que puede ser utilizado por zócalo de alto rendimiento especializado aplicaciones. Esta clase era específicamente diseñada para aplicaciones de servidor de red que requieren un alto rendimiento de . Una aplicación puede usar el patrón asíncrono mejorado exclusivamente o solo en áreas calientes dirigidas (por ejemplo, cuando se reciben grandes cantidades de datos).

+3

Uhm, esto no está mal, pero suena como si fuera una clase especial que se usa * en lugar de 'Socket' normal, cuando de hecho es solo el tipo de evento para ciertos tipos de llamadas asincrónicas a' Socket' . –

+2

La programación con SocketAsyncEventArgs definitivamente no es 'solo el evento para cierto tipo de llamadas asíncronas'. Cuando uno comienza un proyecto, tiene una opción clara que hacer: usar llamadas de sincronización, usar la función asincrónica clásica (beginsend/callback/endsend) o usar SocketAsyncEvent. Ver Mejoras de rendimiento de socket en la versión 3.5 http://msdn.microsoft.com/en-us/library/bb968780.aspx –

0

Existen diferentes formas de utilizar los enchufes normales. Por lo general, el uso asincrónico se escala mejor.

2

Puede usar conectores asíncronos. Si ese no es lo suficientemente bueno, siempre puede consultar Network Direct SPI, parte del HPC SDK. Sin embargo, tenga en cuenta que Network Direct sí requiere un proveedor específico de hardware.

+0

+1 Pero no hay una API administrada para red directa, ¿verdad? –

+0

Esto parece interesante, pero los requisitos específicos del hardware me preguntan si es una gran idea. Otra opción interesante, pero quizás poco inteligente, es simplemente usar P/Invoke. –

+0

Gracias, asincrónico no lo hace, estamos hablando de más de 5k clientes que se conectan al servidor, permanecen conectados y se comunican con el servidor. Echaré un vistazo a SPI directo de red, gracias – aryaxt

1

SocketAsyncEventArgs usa los puertos de finalización de E/S de Windows, lo que lo hace más rápido. Es asincrónico, lo que lo hace escalable. El gran problema con SocketAsyncEventArgs son los puertos de finalización de E/S.

Consulte http://www.codeproject.com/KB/cs/socketasynceventargs.aspx para saber cómo usar SocketAsyncEventArgs.

Cuestiones relacionadas