AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi schnelle Server Client Verbindung ohne Verluste

schnelle Server Client Verbindung ohne Verluste

Ein Thema von AJ_Oldendorf · begonnen am 28. Mär 2025 · letzter Beitrag vom 23. Apr 2025
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#1

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 3. Apr 2025, 18:23
Ach, Entschuldigung, das ist ja auch verkehrt herum. Ich habe es korrigiert. Die Beschreibung war korrekt, der Quelltext nicht. Das Sleep muss ins Else.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
440 Beiträge
 
Delphi 12 Athens
 
#2

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 4. Apr 2025, 05:33
Ich danke dir
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
440 Beiträge
 
Delphi 12 Athens
 
#3

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 4. Apr 2025, 11:14
@jaenicke:
Ich muss doch nochmal fragen, wie würde in deinem Beispiel denn die Implementierung aussehen, wenn der Client auch empfangen kann auf Telegramme vom Server? Da gibt es die procedure OnExecuteHandler ja nicht also müsste man zyklisch das pollen über einen Thread machen oder?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#4

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 4. Apr 2025, 19:49
Ja, das kannst du mit einem Thread machen, der pollt. Aber du musst dann auch sicherstellen, dass nicht gleichzeitig gelesen und geschrieben wird, sprich einen entsprechenden Lock verwenden.

Ich finde diese Architektur nicht schön, aber es funktioniert.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
440 Beiträge
 
Delphi 12 Athens
 
#5

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 7. Apr 2025, 08:27
@jaenicke:

Hm, ein Thread, der zyklisch liest (wie in deinem Beispiel) und ein Thread, der zyklisch schreibt, geht nicht?
Ich muss die beiden untereinander wieder synchronisieren? Irgendwie habe ich erwartet, dass das die Indy intern machen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#6

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 7. Apr 2025, 09:38
Du kannst z.B. das reine Senden und Empfangen mit TMonitor absichern:
Delphi-Quellcode:
TMonitor.Enter(AContext.Connection.IOHandler);
try
  AContext.Connection.IOHandler.ReadBytes...
finally
  TMonitor.Exit(AContext.Connection.IOHandler);
end;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
440 Beiträge
 
Delphi 12 Athens
 
#7

AW: schnelle Server Client Verbindung ohne Verluste

  Alt 7. Apr 2025, 11:13
Also beim Server, habe ich das Senden in einem Thread jetzt so ausgelagert:

Delphi-Quellcode:
var
  SendMsg : PAnsiString;
  Daten : AnsiString;
  outMsg : TIdBytes;

...
if ClientContext.Connection.Connected then
begin
  while (Sendeliste.Count > 0) do
  begin
    var sw4 := TStopwatch.StartNew;
    var t4 : Int64;

    SendMsg := Sendeliste.Items[0];
    Daten := SendMsg^;

    SetLength(outMsg, Length(Daten));
    Move(Daten[1], outMsg[0], Length(Daten));

    t4 := sw4.ElapsedMilliseconds; //Zeitmessung stoppen
    //Zeitmessung 01 auswerten

    sw4 := TStopwatch.StartNew; //Zeitmessung starten

    ClientContext.Connection.IOHandler.Write(outMsg);

    t4 := sw4.ElapsedMilliseconds; //Zeitmessung stoppen
    //Zeitmessung 02 auswerten

    sw4 := TStopwatch.StartNew; //Zeitmessung starten

    Dispose(SendMsg);
    Sendeliste.Delete(0);

    t4 := sw4.ElapsedMilliseconds; //Zeitmessung stoppen
    //Zeitmessung 03 auswerten
  end;
end
Zeitmessung 02 schlägt regelmäßig zu, 300ms ist normal (pro Aufruf), manchmal sogar länger.
Hast du eine Idee dazu?

Das ReadEvent habe ich über ein Merker geblockt, sodass in dem Moment kein Schreiben möglich ist. Da findet also in dem Moment nichts statt.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:40 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