EDIT:
Mein gewünschtes Modell wäre wohl so etwas wie ein IOCP-Server. Das schaue ich mir heute Abend nochmal genauer an. Aber wäre das auch auf anderen Plattformen umsetzbar?
IOCP braucht man nicht, wenn viele Clients lediglich Nachrichten vom Server erhalten sollen:
Ein Serverprozess, der laufend Nachrichten erzeugt ---> (Sehr) viele Clients, die nur die Nachrichten erhalten sollen (via "Server Push")
Das geht plattformübergerifend mit einem Message Broker wie RabbitMQ:
Delphi Server ---> RabbitMQ --- Delphi Clients
clientseitig:
* alle Clients verbinden sich nur mit dem Message Broker. Das bedeutet je Client eine einzige Verbindung (z.B.
Indy Sockets) zum RabbitMQ Server.
* die Clients 'abonnieren' nach dem Verbindungsaufbau einen benannten logischen Nachrichtenkanal beim RabbitMQ Server, dessen Nachrichten sie erhalten möchten
* der Client wartet auf Nachrichten
serverseitig:
* der Server baut eine einzige Verbindung zum Message Broker auf
* der Server sendet Nachrichten an den logischen Nachrichtenkanal auf dem Message Broker, falls welche gesendet werden sollen
* der Message Broker sendet diese Nachricht an alle Clients, die diesen Nachrichtenkanal abonniert haben
So wird erreicht, dass der Delphi Server nie mehr als eine Socket Verbindung benötigt.
Ob die Nachrichten an einem einzigen, tausend oder zehntausend Clients zugestellt werden, macht für den Delphi Prozess keinen Unterschied. Es laufen nicht für jeden Client separate Threads im Delphi Prozess.
Und das Beste: auch wenn zehntausend Clients gleichzeitig Nachrichten an den Delphi-Server senden wollen: der Delphi benötigt nur eine einzige Socket-Verbindung, zum RabbitMQ Server.
p.s. RabbitMQ ist natürlich nur ein Beispiel, es ginge ebenso mit einem ActiveMQ oder Artemis Message Broker (alle open source)