es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Retardo en la comunicación TCP

Tengo 2 aplicaciones de c++ que se comunican a través de tcp/ip. Una aplicación actúa como cliente y otra aplicación actúa como servidor. Hemos observado un retraso en la recepción de datos en el cliente. Este retraso aumenta durante el día, desde unos pocos segundos hasta unos pocos minutos en un día.

¿Cómo concluimos que el retraso está en la comunicación?
Tenemos una declaración de depuración que imprime la marca de tiempo cuando los datos están listos para escribir en el servidor. También tenemos declaraciones de depuración en el cliente cuando recibimos esos datos. Al comparar esas marcas de tiempo, nos dimos cuenta de que recibimos los datos en el cliente después de unos pocos minutos de que fueran escritos por el servidor. Cada dato tiene una ID, por lo que es fácil para nosotros saber que son los mismos datos cuya marca de tiempo se registra en el servidor y en el cliente.

Tamaños de búfer de envío/recepción desde el comando netstat:
Tenemos un búfer de envío de 1GB en el servidor, que se llena como máximo hasta 300MB cuando se ve este retraso.
Tenemos un búfer de recepción de 512MB en el cliente, que siempre muestra 0 cuando se produce el retraso. Esto indica que el cliente está procesando los datos lo suficientemente rápido como para asegurarse de que el remitente (servidor) no se ralentice.

Es mi suposición que de alguna manera los datos se acumulan en el búfer de envío del servidor, lo que está causando este retraso.

¿Es correcta mi suposición? ¿Hay alguna solución para esto?

Actualización 1: Un hecho importante que olvidé mencionar es que ambos programas se están ejecutando en la misma máquina. Deberían ejecutarse en máquinas diferentes, por eso usan tcp, pero en la situación actual se están ejecutando en la misma máquina, así que no debería haber un problema de ancho de banda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según la información proporcionada, parece que el retraso en la recepción de datos en el cliente podría ser causado por una acumulación de datos en el búfer de envío del servidor. Esto puede ocurrir cuando el servidor envía datos más rápido de lo que el cliente puede recibirlos. Sin embargo, es importante tener en cuenta que ambas aplicaciones se están ejecutando en la misma máquina, lo que elimina el problema de ancho de banda.

    Para confirmar si el búfer de envío está causando el retraso, puedes intentar reducir el tamaño del búfer de envío en el servidor y observar si el retraso disminuye. Otra solución podría ser implementar un mecanismo de control de flujo, como el control de congestión o la presión de retroceso, para regular la velocidad de transmisión de datos desde el servidor al cliente. Esto ayudará a prevenir la acumulación de datos en el búfer de envío.

    También es importante considerar otras posibles causas de retraso, como el tiempo de procesamiento en el cliente, la congestión de la red o las limitaciones del hardware. Puede ser beneficioso investigar más estos factores para identificar la causa raíz del retraso.

Comments are closed.