Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Client-Server Programme auf Terminalserver ausführen (https://www.delphipraxis.net/196957-client-server-programme-auf-terminalserver-ausfuehren.html)

Harry Stahl 3. Jul 2018 17:08

Client-Server Programme auf Terminalserver ausführen
 
Hi, ich bekomme hin und wieder die Frage, ob meine Programme, die z.T. als Client-Serverprogramm-Lösungen gestaltet sind, auch auf einem Terminalserver laufen.

Da ich keine Ahnung von Terminalservern habe, kann ich da i.d.R. nur ausweichend antworten ("sollte", "müssten Sie selber ausprobieren").

Daher hier meine Frage:

Eine Programmlösung, die aus einem Server-Programm und beliebig skalierbaren Clients besteht, und die Programme die über TCP-IP miteinander kommunizieren (jeder Client kann bei Bedarf einen anderen Port verwenden), gibt es da Dinge, die grundsätzlich Probleme erzeugen könnten?

Mein Server-Programm läuft auf dem Terminal-Server, ist schon klar. Ich gehe mal davon aus, dass auch die Client-Programme dann auch auf dem Terminalserver installiert werden. Aber werden die dort ausgeführt oder auf den Client-Geräten? Die Clients sind so programmiert, dass nur eine Instanz starten kann. Ist das ein Problem oder ist das - wenn sie auf dem Terminalserver ausgeführt werden - trotzdem möglich (weil der irgendwie die Programme in geschützten Bereichen auseinanderhält)?

Wäre für ein paar hilfreiche Anmerkungen dankbar...

Und: Könnte ich so eine Situation hier mit verschiedenen VM's nachstellen oder wird dafür bestimmte Hardware benötigt?

mjustin 3. Jul 2018 17:17

AW: Client-Server Programme auf Terminalserver ausführen
 
Zitat:

Zitat von Harry Stahl (Beitrag 1406438)
Meins Server-Programm läuft auf dem Terminal-Server, ist schon klar.

Eigentlich sollte das eigene Server-Programm auf einem dafür bereitgestellten eigenen Server und nicht auf dem Terminal-Server installiert werden. Der Terminalserver soll nur die virtuellen Clients bereitstellen. In den virtuellen Clients läuft dann jeweils eine Instanz der Client-Applikation, die dann TCP/IP Verbindungen zum Server aufbauen. Port-Konflikte oder Probleme durch mehrfache Instanzen sind dann nicht zu erwarten, es sei denn, die Client öffnen selber Ports. Das geht nur, wenn alle Clients auf dem Terminalserver unterschiedliche Ports verwenden.

Harry Stahl 3. Jul 2018 17:27

AW: Client-Server Programme auf Terminalserver ausführen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für die Antwort. Was meinst Du mit die Clients öffnen selber Ports?

Hier ist es so angelegt, dass man die mit dem Programm einmal einstellt und dann verwendet.
Andere Ports nutzen die Programme dann nicht.

Als Beispiel mal der Einstellungs-Dialog Netzwerk für den Client anliegend.

mkinzler 3. Jul 2018 17:38

AW: Client-Server Programme auf Terminalserver ausführen
 
Obwohl es Terminalserver heisst, laufen auf ihm die Clients. Der Server sollte auf dem (File-)Server installiert werden.
Alle Sessions uaf dem TS haben natürlich die selbe IP. Es kommt dann darauf an, ob Dein Programm das unterstützt. Die "Clients" müssen dann natürlich nicht nur anhand der IP-Adresse, sondern auch anhand des (Client-)Ports unterschieden werden.

Funktionieren mehrere Clients auf einem Rechner? Melde Dich mal mit 2 Benutzern an deinem lokalen Rechner an und Teste, ob es funktioniert.

Schokohase 3. Jul 2018 17:56

AW: Client-Server Programme auf Terminalserver ausführen
 
Nicht obwohl, sondern weil es Terminalserver heißt laufen die Anwendungen auf diesem und es wird nur die Anzeige übertragen. Eben so, wie man das von ganz früher kannte, wo es für die Benutzer Terminals (ja, damals nur reiner Text) gab. Und ein Server stellt etwas zur Verfügung (z.B. Datenbanken, Dateien, Web) und hier stellt der eben Terminals zur Verfügung.

Bei dem Mutex gib es die Unterscheidung zwischen Session (local) und Machine (global). Ist der Prefix
Delphi-Quellcode:
Global\
dann kann in diesem Falle nur eine Instanz pro Maschine laufen, andernfalls eben pro Anmeldesession (und das passt dann auch für den Terminalserver).

Nutzt du von deiner Anwendung auch noch Verzeichnisse/Dateien lokal auf dem Rechner? Dann müsstest du das auch noch berücksictigen, dass ein Anwender auch mehrfach angemeldet sein könnte (das kann man aber auch abschalten, dann darf jeder Benutzer nur einmal angemeldet sein)

Harry Stahl 3. Jul 2018 18:07

AW: Client-Server Programme auf Terminalserver ausführen
 
Ja, die Ausführung unter unterschiedlichen User-Accounts funktioniert auf demselben PC, erwartungsgemäß muss ich auf dem anderen Benutzer / Client die Port-Nummer ändern, aber dann gehts...

Harry Stahl 3. Jul 2018 18:10

AW: Client-Server Programme auf Terminalserver ausführen
 
Zitat:

Zitat von Schokohase (Beitrag 1406443)
Nutzt du von deiner Anwendung auch noch Verzeichnisse/Dateien lokal auf dem Rechner? Dann müsstest du das auch noch berücksictigen, dass ein Anwender auch mehrfach angemeldet sein könnte (das kann man aber auch abschalten, dann darf jeder Benutzer nur einmal angemeldet sein)

Ja, aber die sind alle auf den jeweiligen Benutzername bezogen erstellt, sollte also kein Problem sein.

Harry Stahl 3. Jul 2018 18:20

AW: Client-Server Programme auf Terminalserver ausführen
 
Zitat:

Zitat von Schokohase (Beitrag 1406443)

Bei dem Mutex gib es die Unterscheidung zwischen Session (local) und Machine (global). Ist der Prefix
Delphi-Quellcode:
Global\
dann kann in diesem Falle nur eine Instanz pro Maschine laufen, andernfalls eben pro Anmeldesession (und das passt dann auch für den Terminalserver).

Also falls Du die Prüfung über doppelt gestartete Anwendungen über Erzeugung eines Mutexes meinst, das habe ich bei den Client-Programmen anders gelöst, als bei Programmen, die nur solo laufen, irgendwelche Mutex-Stopps sollten daher nicht entstehen.

mjustin 3. Jul 2018 18:24

AW: Client-Server Programme auf Terminalserver ausführen
 
Zitat:

Zitat von Harry Stahl (Beitrag 1406441)
Danke für die Antwort. Was meinst Du mit die Clients öffnen selber Ports?

Hier ist es so angelegt, dass man die mit dem Programm einmal einstellt und dann verwendet.
Andere Ports nutzen die Programme dann nicht.

Als Beispiel mal der Einstellungs-Dialog Netzwerk für den Client anliegend.

Das sieht im Screenshot so aus als ob der Client auch (zum Empfangen von Daten) einen eigenen Port öffnen, d.h. der Client agiert auch als Server. Daher muss jeder Client zum Empfangen einen noch freien Port öffnen. Auf einem Terminalserver müssen daher alle Clients jeweils ihren eigenen Port zum Empfangen öffnen.

Was ich allerdings nicht verstehe: sendet der Server Daten an den Client über diesen zweiten Port? Falls ja, warum verwendet der Server nicht den Port mit dem sich der Client zum Senden verbindet, auch in die Gegenrichtung? Bei TCP/IP sind Ports bidirektional, der Server kann Daten über den gleichen Port auch an den Client senden, parallel zum Empfangen von Daten des Clients. (Genau wie man mit einer Telefonleitung Sprechen und Hören kann)

TigerLilly 3. Jul 2018 18:37

AW: Client-Server Programme auf Terminalserver ausführen
 
RDP ist da auch ein Stichwort, wenn du das testen möchtest.

Mutex ist schon erwähnt worden. Das Schreiben/Lesen aus der Registry ist am Terminalserver in anderen Zweigen untergebracht, wenn ich das richtig im Kopf habe, als auf einem normalen Rechner.

Drucken + lokale Laufwerke bzw alle lokalen Ressourcen muss man sich auch ansehen, weil "lokal" am TS ja was anderes bedeutet.

Wenn es mehrere TS gibt (Loadbalancing) sind lokale Daten ein Problem, weil die je nach TS dann auf einem anderen Rechner liegen können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz