Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#13

AW: Server/Client kleine Pakete sehr oft an mehrere Clienten

  Alt 5. Jan 2017, 15:52
Kurze Anmerkung zu mjustin und stahli: Man kann natürlich auch vom Server aus blockierend in den Socket schreiben, ohne dass es vorher eine Anfrage des Clients gegeben haben muss. Allerdings kann dann halt bei Indy, während geschrieben oder sonstwie blockiert wird (vgl. sleep() im Beispiel), keine Nachrichten des Clients empfangen. Prinzipiell geht das zwar mit Sockets mithilfe eines zweiten Threads, aber nicht mit Indy, weil Indy nicht threadsafe ist.
Bei Indy besteht Thread Safety nicht für den Fall, dass aus einem zweiten Thread gleichzeitig aus dem Socket zu lesen oder zu schreiben, während dort bereits ein anderer Thread liest oder schreibt.

Jedoch ist bei Indy problemlos möglich, auf den Socket aus einem Thread zu lesen, und auf denselben Socket aus einem anderen Thread heraus zu schreiben. Eine Socketconnection, zwei Threads (einer liest Daten, einer sendet Daten).

Beispiel: TIdTelnet, über die Telnet-Serververbindung sendet der Client Daten auf den Socket, während der Client in einem separaten Thread Nachrichten vom Server empfängt. Ein Socket, eine in TIdTelnet enthaltene TIdTCPConnection-Instanz, zwei Threads.

Das ist threadsafe.
Michael Justin
  Mit Zitat antworten Zitat