Frage

Ich habe eine Client / Server-Verbindung über einen TCP-Socket, mit dem Server Schreiben an den Kunden so schnell wie möglich.

Suchen Sie meine Netzwerkaktivitäten über die Produktion Client empfängt Daten bei rund 2,5 Mb / s.

Ein neuer kompakter Client, dass ich schrieb die Rate auf nur lesen und Benchmark, hat eine Geschwindigkeit von etwa 5.0MB / s (was wahrscheinlich um ist die Höchstgeschwindigkeit der Server übertragen können).

Ich habe mich gefragt, was die Preise hier regiert, da der Client keine Daten an den Server sendet sie über alle Frequenzgrenzen zu erzählen.

War es hilfreich?

Lösung

In TCP ist der Client. Wenn der Server die TCP-Fenster voll ist - es muss warten, bis mehr ACKs vom Client gesendet wurde. Es wird von Ihnen in dem TCP-Stack versteckt, aber TCP einleitet Lieferung garantiert, was auch bedeutet, dass Server keine Daten senden können schneller als Rate, mit der Client sie verarbeitet wird.

Andere Tipps

hat TCP-Flusssteuerung und es geschieht automatisch. Lesen Sie es unter http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Flow_control

Wenn das Rohr füllt aufgrund Steuerung fließen, um den Server-I / O-Buchse Schreiboperationen nicht abgeschlossen, bis die Flusssteuerung releaved wird.

Der Server Daten an 5.0MB schreibt / s, aber wenn Ihr Kunde ist der Engpass hier dann Server, bevor die Daten warten muss, in „Gesendete Buffer“ wird vollständig an den Client gesendet, oder genügend Platz freigegeben wird in mehr zu setzen Daten.

Wie Sie gesagt hat, dass das leichte Gewicht Client in der Lage war zu 5.0MB / s zu empfangen, dann wird es die Post-Empfangsoperationen in der Client sein, dass Sie zu überprüfen. Wenn Sie Daten empfangen und zu verarbeiten es dann, bevor Sie mehr Daten lesen, dann könnte dies der Engpass sein.

Es ist besser, Daten asynchron zu empfangen, und sobald man erhält abgeschlossen ist, fragen Sie die Client-Sockets wieder Empfangen von Daten zu beginnen, während Sie die empfangenen Daten in einem separaten Thread-Pool-Thread verarbeiten. Auf diese Weise Ihr Kunde immer verfügbar ist, Daten empfangen incomming und Server bei voller Geschwindigkeit senden kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top