AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Indy TCP Server/Client: Streams senden/empfangen und Unterschied zu Strings???
Thema durchsuchen
Ansicht
Themen-Optionen

Indy TCP Server/Client: Streams senden/empfangen und Unterschied zu Strings???

Ein Thema von romber · begonnen am 20. Apr 2014 · letzter Beitrag vom 21. Apr 2014
 
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Indy TCP Server/Client: Streams senden/empfangen und Unterschied zu Strings???

  Alt 20. Apr 2014, 20:19
1. Ist die Datenübertragung mittels Streams grundsätzlich schneller oder langsammer als die mit Strings? Macht es überhaupt Sinn, auf Streams umzubauen?
Wenn man sich auf eine stringbasierte Übertragung festlegt, werden binäre Daten noermalerweise erst in einen String übersetzt, damit dieser dann mit einem eindeutigen Terminator abgeschlossen werden kann. Durch die Kodierung steigt der Platzbedarf des Datenstroms um 33–36 % (Base64, http://de.wikipedia.org/wiki/Base64).

In diesem Fall ist es vorteilhafter einen Stream zu senden: zum einen spart es Bandbreite, und es entfällt die Base64 Konvertierung auf Server und Client.

2. Wie schon erwähnt, müssen permanent mehrere Hundert einzelne Datensätze pro Minute hintereinander übertragen werden. Ist die Übertragung mittels Streams überhaupt dafür geeignet?
Begrenzt wird die Leistung durch die freien Hardwareresourcen und das Netzwerk. Es kommt auf den Umfang der Daten an, eine Nachrichtenfrequenz von mehreren pro Sekunde ist völlig harmlos (auf einem Kern schaffe ich aktuell von einem Delphi TCP Client bis zu 40.000 Nachrichten die an einen auf Java basierenden Server gesendet und von diesem an den Client zurückgesendet werden).

3. Im Fall von Strings muss ich jeden zu übertragenen String mit einer eindeutigen Zeichenkombination beenden, damit der Client die "zusammengewachsene" Datenpakete auseinander halten kann. Muss ich irgendwas in der Art auch für Streams anwenden?
Übertragung mittels Streams überhaupt dafür geeignet?
Da Streams auch jedes denkbare Endekennzeichen enthalten können, geht es nur umgekhert - mit einer Übermittlung der Länge vor den Bytes des Streams. Indy's TIdTCPClient.IOHandler unterstützt aber das Senden / Empangen von Streams mit einer automatisch vorangestellten Längenangabe. Damit ist nur wenig eigener Code notwendig. Wichtig ist vor allem die Freigabe des Streams nach seiner Verwendung (auf beiden Seiten).

4. In Foren wird es viel diskutiert über die Übertragung von Daten in Records (auch mittels Streams). Welche Vorteile könnten Records in meinem Fall haben?
Records funktionieren nur wenn Client und Server garantiert exakt den gleichen Recordtypen verwenden. Sobald dies nicht garantiert ist (verschiedene Server / Clientversionen gleichzeitig im Einsatz, 32/64 Bit Unterstützung...) sind andere Formate robuster.
Michael Justin
  Mit Zitat antworten Zitat
 


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 00:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz