Domanda

Ho una connessione client / server su un socket TCP, con il server per iscritto al cliente il più velocemente che può.

Guardando oltre la mia attività di rete, il client di produzione riceve i dati a circa 2,5 Mb / s.

Un nuovo client leggero che ho scritto per leggere e punto di riferimento solo il tasso, ha un tasso di circa 5.0MB / s (che è probabilmente intorno alla velocità massima del server può trasmettere).

Mi chiedevo che cosa governa le tariffe qui, dal momento che il client invia nessun dato al server per dire di lui circa eventuali limiti di frequenza.

È stato utile?

Soluzione

In TCP è il cliente. Se la finestra TCP del server è pieno - ha bisogno di aspettare fino a più ACK dal cliente è venuto. Si è nascosto da voi dentro lo stack TCP, TCP ma introduce consegna garantita, il che significa anche che server non può inviare dati più velocemente di tasso al quale cliente li sta elaborando.

Altri suggerimenti

TCP ha il controllo di flusso e avviene automaticamente. Leggere su di esso a http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Flow_control

Quando il tubo si riempie causa di controllo di flusso, il server I presa / O operazioni di scrittura non sarà completa fino a quando il controllo del flusso viene releaved.

Il server sta scrivendo i dati a 5.0MB / s, ma se il cliente è il collo di bottiglia qui poi server deve attendere prima che i dati in "Buffer Sent" è completamente inviato al cliente, o abbastanza spazio viene rilasciato a mettere in più i dati.

Come lei ha detto che il client leggero stato in grado di ricevere a 5.0MB / s, allora sarà le operazioni post-ricezione nel tuo client che si devono controllare. Se si ricevono i dati e poi elaborarlo prima di leggere più dati, allora questo potrebbe essere il collo di bottiglia.

E 'meglio ricevere dati in modo asincrono, e non appena uno di ricezione è completa, chiedere i socket client per iniziare a ricevere nuovamente i dati, mentre si elaborano i dati ricevuti in un thread pool di thread separato. In questo modo il cliente è sempre disponibile a ricevere in entrata dei dati e server può inviarlo alla massima velocità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top