Hallo!
Nehmen wir an, es gibt ein mittels TCPServerSocket aufgebautes Serverprogramm, das nach einem bestimmten Erreignis einen String an ca. 100 verbundene Clients senden soll. Hauptfunktion des Programms ist etwas ganz anderes, deswegen wird auf primitivste Weise gesendet:
Code:
...
sCount := ServerSocket1.Socket.ActiveConnections;
for i := 0 to sCount - 1 do
ServerSocket1.Socket.SendText('Passiert ist dies und das. Bla bla bla...');
...
Ich hatte bis jetzt mit Sockets nicht viel zu tun, weiß aber, daß im Fall
TCP einen sicheren Kanal zwischen Client und Server bereitgestellt wird und beim Senden überprüfft wird, ob die Datenpakete ihr Ziel erreicht haben. Deswegen nehme ich an, dass bei dieser Schleife oben nach jedem Sendevorgang eine kurze in der regel kaum bemerkbare Pause entsteht und der Server erst dann an den nächsten Client sendet, wenn er eine Bestätigung bekommet hat. Bitte korigieren, wenn ich mich irre.
Und jetzt ist eine Beispielsiuation: Server geht über eine ziemlich schnelle Leitung ins Internet. Mehrere Clients sind zu dem Server verbunden. Die meisten benutzen DSL. Der Rest geht entweder über langsame DFÜ-Verbindungen oder sogar mobil über GPRS (was verdammt langsamm ist) ins Internet. Dann werden diese "schwarzen Schaffe" die ganze Schleife bremsen, oder?
Eigentlich brauche ich in meinem Fall keine Bestätigung des Klienten. Die Daten sollen blind zu den Gegenstellen gesendet werden, es ist mir absolut egal, ob die Daten dann ankommen oder nicht. Wichtig ist, dass sehr schnell gesendet wird. Was kann ich machen? Gibt es eine in meinem Fall sinvolle Alternative zu
TCP? Wenn jamand einen einsetzbaren Code-Beispiel hat, werde ich mich sehr freuen.
Danke!
MfG,
Ralf