Antecedentes
Tengo una implementación de un servidor HTTP en C#. Utilizando ab descubrí un problema de rendimiento extraño. ¡Cada solicitud tomó 5 ms con Keep-Alive Off pero 40 ms con Keep-Alive activado!Enchufe "Flush" al habilitar temporalmente NoDelay
La página de prueba se genera en un solo byte [] que se envía como respuesta con un solo socket. Enviar llamada.
La causa es, por lo que puedo decir, el algoritmo de Nagle utilizado en la pila TCP.
TCP Flush?
Hasta ahora estoy usando la propiedad NoDelay al final de cada solicitud HTTP que se sirve.
socket.NoDelay = true;
socket.NoDelay = false;
Lo que soluciona el problema por el momento. Pero no tengo documentación para respaldar mi descubrimiento.
Esto se probó en un sistema de linux/mono.
¿Hay una forma estándar de enjuagar la conexión TCP?
relacionada
This answer es abordar la misma cuestión. La diferencia aquí es que estoy buscando solo deshabilitar temporalmente el algoritmo.
Si solo tuviéramos un [TCP Nagle flush] (http://stackoverflow.com/questions/6726832/what-happened-to-the-tcp-nagle-flush) ... –
Podría ser que esté ejecutando Windows que tiene una implementación diferente? – hultqvist