AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Kleine Pakete langsamer?
Thema durchsuchen
Ansicht
Themen-Optionen

Kleine Pakete langsamer?

Ein Thema von Thanatos81 · begonnen am 9. Okt 2006 · letzter Beitrag vom 9. Okt 2006
Antwort Antwort
Thanatos81
(Gast)

n/a Beiträge
 
#1

Kleine Pakete langsamer?

  Alt 9. Okt 2006, 07:04
Moin zusammen!

Wir bauen hier gerade ein Programm im Client-Server-Prinzip mit Indy. Um abschätzen zu können was für Zeiten wir später erzielen haben wir einen Belastungstest gefahren. Der war wie folgt aufgebaut: Client schickt einen Header (Record) von 9 Byte und dann einen in der Größe variablen Stream. Der Server vaerarbeitet die Daten und schickt eine Antwort zurück, danach schickt der Client erneut das Datenpaket und den Header. Das ganze lassen wir eine Minute laufen.

Seltsamerweise konnten wir mit Streams von ca. 30 KByte ungefähr 1900 Aufgaben und Antworten verschicken. Bei einer Streamgröße von 20 Byte bekommen wir allerdings nur 275 Pakete und Antworten durch hin. Wir haben bei der Client-Komponente die SendBufferSize auch dementsprechend angepasst, das macht allerdings nicht ein Paket Unterschied.

Hatte jemand schon mal ein ähnliches Phänomen und vielleicht sogar eine Lösung?

Danke Im Vorraus,
Thomas
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Kleine Pakete langsamer?

  Alt 9. Okt 2006, 08:50
Könnte es daran liegen wie Windows die Daten zusammenfasst zu einem Packet auf der untersten OSI Schicht? Schliesslich sendet er nicht sofort wegen einem Byte ein Packet sondern vorher kommen auf den obersten OSI Schichten noch Buffer die gefüllt werden und dann etweder zeitlich - oder vorher durch die Füllung - versendet werden. Dadurch werden auch Packet zusammengefasst und als Einheit verschickt. Könnte dies hier zu Buche schlagen?
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Kleine Pakete langsamer?

  Alt 9. Okt 2006, 08:51
Zitat von Muetze1:
Könnte dies hier zu Buche schlagen?
Ja. Wenn ich mich recht entsinne waren es 512 Bytes oder so, bevor Windows diese sofort versendet. @Thanatos81: Einfach mal die Grenze testen

.......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#4

Re: Kleine Pakete langsamer?

  Alt 9. Okt 2006, 09:00
Ja, auf den Trichter bin ich inzwischen auch schon gekommen und da liegt der Hund wirklich begraben. Abhilfe lässt sich angeblich per IdTCPClient1.Socket.Binding.SetSockOpt(ID_SOL_SOCKET, Id_SO_SNDBUF, optval, optlen); schafffen. Allerdings bekomme ich dann immer:
Zitat:
---------------------------
Gateway
---------------------------
Socket-Fehler # 10014

Falsche Adresse.
---------------------------
OK
---------------------------
Also wollte ich erstmal die aktuellen Werte auslesen und dann neu setzen:
Delphi-Quellcode:
          
if IdTCPClient1.Socket.Binding <> nil then
  begin
    optlen := SizeOf(integer);
    IdTCPClient1.Socket.Binding.GetSockOpt(id_sol_socket,id_so_sndbuf,optval, optlen);
    optval := PChar(29); //29 = Datensatz (20) + Footer (9)
    IdTCPClient1.Socket.Binding.SetSockOpt(ID_SOL_SOCKET, Id_SO_SNDBUF, optval, optlen);
  end;
Da bekomme ich die Fehlermeldung allerdings schon beim GetSockOpt
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#5

Re: Kleine Pakete langsamer?

  Alt 9. Okt 2006, 13:45
So, anstatt die Länge der Datenpakete jedes Mal zu setzen, mache ich nun folgendens:
Delphi-Quellcode:
if IdTCPClient1.Socket.Binding <> nil then
  IdTCPClient1.Socket.Binding.SetSockOpt(Id_IPPROTO_TCP, Id_TCP_NODELAY, PChar(0), 1);
Dadurch wird einfach eingestellt, dass nicht gewartet werden soll, bis das Paket voll ist. Ergebnis: Von den kleinen Paketen verschicken wir jetzt ca. 78.000 Pakete/Min. So viel wird zwar nie benötigt werden, aber man kann den Kunden beruhigen, dass er so schnell nicht gegen die Wand fahren wird

Danke Muetze und sakura für eure Posts und auch allen anderen die sich den Kopf zerbrochen haben
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz