Thema: Delphi Spielwiese - SocketTest

Einzelnen Beitrag anzeigen

mjustin

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

AW: Spielwiese - SocketTest

  Alt 12. Okt 2016, 17:32
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)
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat