c# wcf nettcpbinding

c# - WCF Cuánto más rápido es TCP que HTTP



nettcpbinding (5)

Entiendo que TCP es más rápido que HTTP para WCF, pero me interesa saber cuánto. Tengo un problema de rendimiento con una aplicación grande que usa HTTP y estoy considerando si pasar a netTcp arrojaría una mejora de rendimiento suficiente para que la inversión valga la pena.

¿Alguien sabe la diferencia en la cantidad de datos enviados por netTCP en comparación con los enlaces Http?


¡Haz algunas pruebas! Depende de tu red y de lo que realmente está haciendo tu servicio.

En general, será más rápido porque las conexiones TCP son más bajas en la pila y no tienen la sobrecarga de crear una nueva solicitud una vez que se abre una conexión.


De acuerdo con el modelo ISO / OSI, TCP es una capa de transporte. HTTP es una capa de aplicación implementada sobre TCP. Así que HTTP siempre tendrá una sobrecarga adicional, sin importar qué.

En general. si HTTP resuelve una buena cantidad de problemas de su capa de aplicación, entonces úselo, porque está bien establecido, es altamente interoperable y probado. Si necesita hacer un poco de trabajo para que las cosas funcionen incluso cuando su aplicación usa HTTP, y las cosas mejoran y simplifican con TCP, entonces, por supuesto, busque un protocolo de nivel inferior.

Específicamente con respecto a WCF, no tengo idea de cómo se ve su implementación TCP-only. Sin embargo, apostaría que es más simple que HTTP. HTTP probablemente se usa como un medio de comunicación "a prueba de balas", y el costo de la sobrecarga de HTTP se justifica por el hecho de que el protocolo atraviesa fácilmente servidores proxy, etc.


Hasta el momento, muchas respuestas pero no datos concretos.

Microsoft produjo una prueba para medir exactamente lo que preguntó: la diferencia en el rendimiento (rendimiento) entre HTTP y TCP para los servicios de WCF. (¡La prueba no consideró el tamaño del paquete!)

Lo que esto muestra es que TCP / binary entrega casi 2 veces el rendimiento de HTTP / xml, para los mensajes en esta prueba. El cuello de botella en esta prueba fue la CPU del servidor, no la red. Sus resultados variarán porque sus mensajes serán más (o menos) complejos, su red estará más (o menos) restringida y su código de aplicación será más (o menos) intensivo en CPU. Pero esto te da una idea.

En realidad, el benchmark de Stocktrader fue competitivo, comparando el rendimiento de WCF en Windows Server con el de WebSphere en Linux. Pero como parte de eso, MS también comparó el rendimiento de WCF usando HTTP con el rendimiento de WCF usando TCP.

descargue el informe completo de Stocktrader


La parte más cara de WCF es la serialización, creo. Comparado con eso, la sobrecarga de una pila de servidor web es de aproximadamente 5-10%, que el transporte solo TCP elimina. La pregunta es, ¿necesita los beneficios adicionales de un servidor web?


No es así de simple. HTTP, TCP y other opciones de transporte tienen opciones para equilibrarse fuera de la velocidad. La confiabilidad puede jugar un papel importante en la estabilidad de su aplicación dependiendo de lo que realmente hace . No solo voltee el protocolo y ejecute su programa un par de veces y considere que es una buena prueba. Lea sobre los protocolos y pondere las opciones según sus requisitos. Ejecute algunas pruebas de programa, carga, rendimiento y red, preferiblemente con la ayuda de un administrador de red calificado.

Actualización: dado que cambiaste tu pregunta, también debería tener en cuenta que debes averiguar qué está causando la pérdida de rendimiento en lugar de medir el tamaño teórico del paquete. Como todo el mundo dice, ejecuta pruebas.