simple - ¿Escribir un servidor TCP/IP altamente escalable en C#5 con el patrón async/await?
tcp ip asynchronous communication c# (2)
Tengo la tarea de diseñar un servidor TCP / IP bastante simple que debe aceptar conexiones de múltiples clientes. Necesita estar escrito en C #, y estoy usando .NET 4.5. Dicho esto, no estoy seguro de cuál es el "estado del arte" actual para la escalabilidad de servidor / cliente TCP / IP en .NET 4.5.
Vi esta publicación: Cómo escribir un servidor basado en Tcp / Ip escalable . Pero eso se relaciona con .NET 2.0 y 3.5 y no menciona el patrón async / await.
Soy capaz de escribir un servidor de la "vieja manera" ... pero quiero saber cuál es la "nueva forma".
- ¿Cuál es la mejor manera de utilizar los nuevos métodos Async en Socket, TcpClient o TcpListener para crear un servidor escalable en C #?
- ¿Los nuevos métodos Async aprovechan los puertos de finalización de E / S?
- ¿Está haciendo más eficiente su propio oyente Socket, o las clases TcpListener / TcpClient son bastante buenas ahora?
EDIT: preguntas adicionales.
¿Cuál es la mejor manera de utilizar los nuevos métodos Async en Socket, TcpClient o TcpListener para crear un servidor escalable en C #?
No hay ningún método async
nuevo en Socket
; los métodos llamados *Async
en Socket
son un conjunto especial de API para reducir el uso de memoria. TcpClient
y TcpListener
obtuvieron algunos nuevos métodos async
.
Si desea la mejor escalabilidad, probablemente sea mejor utilizar blogs.msdn.com/b/pfxteam/archive/2011/12/15/10248293.aspx . Si desea el código más fácil, probablemente sea mejor que use TcpClient
y TcpListener
.
¿Los nuevos métodos Async aprovechan los puertos de finalización de E / S?
Sí, al igual que la mayoría de las otras API asíncronas en el BCL. AFAIK, la clase Stream
es la única que posiblemente no pueda usar el IOCP; todos los demás *Begin
/ *End
/ *Async
métodos asíncronos usan el IOCP.
¿Está haciendo más eficiente su propio oyente Socket, o las clases TcpListener / TcpClient son bastante buenas ahora?
Las clases son bastante buenas como son. Stephen Toub tiene una blogs.msdn.com/b/pfxteam/archive/2011/12/15/10248293.aspx que es un poco más eficiente en términos de uso de memoria.
Con .net4.5 puede usar la palabra clave async / await para construir el servidor tcp. Aquí está el código de ejemplo. async await tcp server