Ich führe wiederholte send / recv-Aufrufe auf TCP-Sockets in Ruby durch und habe signifikante Geschwindigkeitsunterschiede zwischen zwei Socket-Verwendungen gefunden --- einfach gesagt, die Wiederverwendung eines Sockets erweist sich als langsamer als fortwährendes Schließen und wiedereröffnen.
Der Server ist also:
%Vor%Es gibt einfach die Anfrage zurück an den Client.
Client 1 verbindet sich jedes Mal neu:
%Vor%Client 2 hält seinen Socket geöffnet:
%Vor%Das Ergebnis der Ausführung dieses Codes ist wie folgt:
%Vor% Es ist mein Verständnis, dass die Wiederverwendung eines Sockels mir Zeit sparen sollte (nicht 347 mal länger!). Ich habe versucht, IO#flush
nach dem Schreiben in Sockets aufzurufen, aber das macht keinen Unterschied. Die Deaktivierung des Nagle-Algorithmus hilft in gewissem Maße, aber nicht annähernd genug.
Was würde dazu führen, dass der obige Code (läuft unter Linux 3.8.5 und ruby 2.0.0) mit einer so großen Geschwindigkeitsdiskrepanz ausgeführt wird, und wie kann ich das beheben?
Das Deaktivieren des Nagle-Algorithmus auf den Client- und Server-Sockets behebt dies:
%Vor%Ergebnis:
%Vor%Hoffe das hilft jemandem.
Tags und Links ruby sockets performance tcp