Einzelnen Beitrag anzeigen

romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#8

AW: Indy TCP Client/Server: spontan Nachricht an den Server senden?

  Alt 10. Jun 2013, 11:22
...Entweder ruft man die Prozedur dann nur z.B. jeden n-ten Durchlauf der Sendeschleife auf, oder - aber das ist ein wenig aufwendiger - man verlegt die Prozedur in einen eigenen Thread. Die beiden Streams des Sockets können von zwei verschiedenen Threads gleichzeitig benutzt werden - ein Sende-Thread, ein CheckForData-Thread.
Was bedeutet "aufwendiger" in diesem Fall? Nur dass ich einen neuen Thread abspalten muss, der auf IOHandler des Sockets zugreift oder muss ich da unbedingt noch was beachten? Muss ich die Zugriffe auf IOHandler sychnronisieren? Oder kann ich auf die Streams einzeln zugreifen?

Vielleicht könnte man mit select auch ohne zweiten Thread auskommen. Keine Ahnung wie Indy (uÄ) das unterstützen.

Mögliches Vorgehen:
  1. mit select auf Sende- und Empfangsrichtung warten
  2. In den Socket schreiben bzw. daraus lesen (jeweils nicht blockierend). In der zu bevorzugenden Richtung machst dabei weiter, bist du nicht mehr kannst, in der anderen Richtung verarbeitest du nur einen kleinen Buffer (wenn überhaupt).
  3. zurück zu 1.

Mit nicht-blockierenden Socketoperation lässt sich viel anstellen
Ich darf in der bereits bestehener Routine nicht viel verändern. Einen neuen Thread oder eine zusätzliche Prozedur, die ab und zu aufgerufen wird wäre noch kein Problem. Aber vielen Dank für den Vorschlag.
  Mit Zitat antworten Zitat