AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Suche Konzept: Gleichzeitige TCP Datentransfers
Thema durchsuchen
Ansicht
Themen-Optionen

Suche Konzept: Gleichzeitige TCP Datentransfers

Ein Thema von Zacherl · begonnen am 31. Jan 2010 · letzter Beitrag vom 1. Feb 2010
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Suche Konzept: Gleichzeitige TCP Datentransfers

  Alt 31. Jan 2010, 20:54
Hey,

ich möchte ein Programm schreiben, welches z.B. 5 Dateien gleichzeitig an einen Empfänger senden kann. Hierbei möchte ich auch nur ein Socket verwenden. Ich habe mir überlegt, dass ich in jedem meiner Sende Threads die Daten erstmal in Pakete aufteile und dann nacheinander sende.

Normalerweise habe ich die Größe der Daten vorweggesendet und dann beim Empfänger solange gewartet, bis alle Daten vollständig sind.

Bei den Multi Threaded Transfers allerdings habe ich ja zusätzlich das Problem, dass ich die einzelnen Datenblöcke beim Empfang richtig zuordnen können muss. Ich hatte überlegt auf Seiten des Senders eine ID einzuführen, die bei jedem Transfer um 1 erhöht wird und die zusätzlich zur Paketgröße jedem Paket als Header vorweggeschickt wird. Das erste Paket würde dann die Größe der Gesamtdaten beinhalten, woraufhin dann nach beschriebenem Muster die Datenpakete folgen würden. Durch die IDs wären die Pakete beim Empfänger ja eindeutig zuzuordnen.
Die Sende Threads würden sich dann selbstständig nach dem Senden eines Paketes anhalten und den nächsten Thread starten, bzw. das könnte man sicher auch über CriticalSections einfacher regeln oder?

Hat jemand vielleich ein einfacheres oder besseres Konzept?

Viele Grüße
Zacherl
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Suche Konzept: Gleichzeitige TCP Datentransfers

  Alt 31. Jan 2010, 21:02
Ja. Die Daten nacheinander senden
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: Suche Konzept: Gleichzeitige TCP Datentransfers

  Alt 31. Jan 2010, 21:14
Zitat von mkinzler:
Ja. Die Daten nacheinander senden
Danke für diese konstruktive Antwort
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Suche Konzept: Gleichzeitige TCP Datentransfers

  Alt 31. Jan 2010, 21:18
Da es hier ja um das Konzept geht wäre es interessant zu wissen warum nur ein Socket verwendet werden soll.
Denn wenn alles über einen Soll muss eine zusätzliche Information gesendet werden, und zwar welche Datei es ist. Und ich vermute das während 2 Dateien übertragen werden plötzlich eine dritte dazu kommen können soll?! Wenn dem so ist müsste auch die Info jedesmal mit gesendet werden ob es Daten einer Datei sind oder ob es die Bekanntgabe einer neuen Datei ist die hinzu kommen soll.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Suche Konzept: Gleichzeitige TCP Datentransfers

  Alt 31. Jan 2010, 21:20
Deshalb wäre es meiner Meinung besser die Daten per FIFO zu senden.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Suche Konzept: Gleichzeitige TCP Datentransfers

  Alt 31. Jan 2010, 21:24
@mkinzler: Im ersten Moment dachte ich das auch. Im zweiten Moment habe ich an die gängigen Browser und Messanger Clients gedacht. Da wird überall gleichzeitig hoch- und runtergeladen. Und ich würde schon komisch schauen wenn ich mehrere Downloads habe und der zweite erst startet nachdem der erste abgeschlossen ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Suche Konzept: Gleichzeitige TCP Datentransfers

  Alt 31. Jan 2010, 21:25
Diese verwenden aber verschiedene Sockets und könne sich dann auf den Mechanismus von TCP verlassen. So muss er sich selber darum kümmern
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

Re: Suche Konzept: Gleichzeitige TCP Datentransfers

  Alt 31. Jan 2010, 21:55
Das Problem ist dass meine Empfängeranwendung bei der ein Server Socket läuft sehr sehr viele Transfers gleichzeitig empfangen muss. Dabei von verschiedenen PC multiple Sockets zu öffnen, würde die Kapazität des Empfängers schnell ausreitzen. (erstmal die Sockets und für jedes Socket mindestens einen Empfangs Thread, da ich non-blocking arbeite)

Ich denke nochmal drüber nach und teste das ganze erstmal mit Multi Sockets. Vielleicht reichen die Ressourcen ja aus ..
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#9

Re: Suche Konzept: Gleichzeitige TCP Datentransfers

  Alt 1. Feb 2010, 10:25
Zitat von Zacherl:
Das Problem ist dass ... sehr sehr viele Transfers gleichzeitig empfangen muss. ... würde die Kapazität des Empfängers schnell ausreitzen. (erstmal die Sockets und für jedes Socket mindestens einen Empfangs Thread, da ich non-blocking arbeite)
Hallo Zacherl, für Verbindungs orientierte Hochlast Server Anwendungen, wird normalerweise folgendes Konzept verwendet.

1. Ein Socket Acceptor Thread speichert alle eingehenden Client Verbindungen in einem Ringbuffer.
2. Diese Client Verbindungen (Ringbuffer) werden von einer einstellbaren Anzahl von WorkerThreads (~8 THreads per CPU) abgearbeitet.

Unter Windows ist TcpNumConnections defaultmäßig auf 16777214 (16 Millionen) Gleichzeitiger Connections ausgelegt.

Bei Verwendung von Winsock 2.0 ist ein ähnliches Konzept verfügbar, jedoch mit wesentlich performanteren IOCP's

Solltest Du bei einem derartigen Konzept Resourcen bzw. performance Probleme bekommen, sehe ich nur noch Die möglichkeit
auf ein verbindungsloses Protokoll (UDP) umzusteigen.

lg. Astat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  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 04:28 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