Pregunta

Tengo una conexión de cliente / servidor a través de un socket TCP, con la escritura servidor al cliente lo más rápido que pueda.

Mirando por encima de mi actividad de la red, el cliente recibe los datos de producción en alrededor de 2,5 Mb / s.

Un nuevo cliente ligero que escribí a leer y comparar el índice, tiene una tasa de alrededor de 5.0MB / s (que es probablemente alrededor de la velocidad máxima del servidor puede transmitir).

Me preguntaba lo que rige las tasas de aquí, ya que el cliente no envía datos al servidor para decirle acerca de los límites de la frecuencia.

¿Fue útil?

Solución

En TCP es el cliente. Si la ventana TCP del servidor está lleno - tiene que esperar hasta que llegaron más ACK de cliente. Que es oculto dentro de la pila TCP, pero introduce TCP garantiza la entrega, lo que también significa que el servidor no puede enviar datos más rápido de velocidad a la que el cliente les está procesando.

Otros consejos

TCP tiene control de flujo y se hace automáticamente. Leer sobre ella en http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Flow_control

Cuando el tubo se llena debido al flujo de control, el servidor de I / O socket operaciones de escritura no se releaved hasta que el control de flujo completo.

El servidor está escribiendo datos a 5.0MB / s, pero si su cliente es el cuello de botella aquí, entonces, el servidor tiene que esperar antes de que los datos en "Sent Buffer" está completamente enviado a cliente, o suficiente espacio se libera a poner más datos.

Como usted ha dicho que el cliente ligero fue capaz de recibir a 5.0MB / s, entonces será las operaciones posteriores a la recepción de su cliente que usted tiene que comprobar. Si está recibiendo datos y luego procesarla antes de leer más datos, entonces esto podría ser el cuello de botella.

Es mejor para recibir datos de forma asíncrona, y tan pronto como uno recibe es completa, pregunte a los sockets de cliente para empezar a recibir datos de nuevo, al tiempo de procesar los datos recibidos en un subproceso del grupo de hilo separado. De esta manera el cliente está siempre disponible para recibir incomming de datos, y el servidor puede enviar a toda velocidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top