Ich versuche, das mal korrekt zusammen zu fassen - so dass ich es auch verstehe.
Über die Indys fragt normalerweise der Client1 oder Client2 beim Server an.
Der Server startet einen Thread, berechnet darin die Antwort (man sollte also im OnExecute nicht auf die
GUI o.ä. zugreifen ohne vorher Konflikte abzusichern) und schickt die Antwort an den anfragenden Client zurück.
Nach einer gewissen Zeit räumt der Server dann zyklisch den verbrauchten Speicher bzw. die Verbindungen wieder auf.
Deshalb ist es grundsätzlich besser, selten größere Datenpakete zu übertragen als extrem oft kleine.
Wenn der Server von sich aus eine Nachricht an einen Client senden will wird das schwieriger.
Zum einen muss der Server alle Clients kennen (Details kann ich nicht beschreiben) und die Server müssen dauernd lauern, ob eine Nachricht anliegt.
Alternativ können alle Clients natürlich auch zyklisch beim Server anfragen "Hey, hat jemand bei Dir Button1 gedrückt", worauf ja oder nein zurück kommt.
Welches der beiden Varianten der bessere Weg wäre kann ich nicht sagen.
Grundsätzlich ist
Indy aber wohl eher auf Frage(hin)-Antwort(zurück) ausgerichtet.
Man könnte sonst noch beide Seiten mit jeweils einem Server und einem Client ausstatten.
Für so etwas wie Chats sollten aber Sockets (peer to peer) effektiver einsetzbar sein.
(Ich lasse mich gern korrigieren, wenn das noch nicht ganz passt.)
[EDIT]
Schau mal noch hier:
http://www.delphipraxis.net/180134-i...ptimieren.html
Das könnte nützlich sein.
[EDIT2]
Oups, jetzt habe ich irgendwie den Überblick über die
Indy-Beiträge verloren.
mjustin hat Deine Frage unter #3 ja fast beantwortet.