Mussten Sie schon einmal mehrere Webserver verwenden, um z. B. den Code Ihrer Webanwendung in mehrere Geschäftsbereiche aufzuteilen, den Webserver des Administrators vom Webserver des Benutzers zu trennen oder einen alten, noch nicht präemptiven Teil in einer separaten Instanz laufen zu lassen, damit der Hauptteil präemptiv laufen kann?
Wenn Sie mit dem Kopf nicken und ja sagen, dann lesen Sie weiter, denn 4D v18 R3 ermöglicht Ihnen dies … mit Leichtigkeit.
Manipulation von WebserverS
Der neue WEB server Befehl erlaubt es Ihnen, Webserver in separaten Objekten für jeden Server zu verwalten. Er akzeptiert auch einen optionalen Parameter, um den zu verwendenden Server zu definieren:
- Web database server um den aktuellen Datenbank-Webserver zu manipulieren (die Host-Datenbank oder die Komponentendatenbank, je nachdem, wo der Befehl aufgerufen wird)
- Web host database server Manipulation des Webservers der Host-Datenbank von einer Komponente aus
- Web request receiving server Manipulation des Webservers, der eine Anfrage erhält, in einer gemeinsamen Methode der Webserververwaltung (Beispiel).
AUSFÜHREN eines Komponenten-Webservers
Aus Kompatibilitätsgründen startet ein Komponenten-Webserver nicht von selbst, auch wenn sein Parameter „Webserver beim Start starten“ aktiviert ist.
Um den Webserver der Komponente zu starten, müssen Sie zunächst sein Webserver-Objekt mit dem Befehl WEB server(Web database server) instanziieren. Er gibt ein Objekt zurück, mit dem Sie den Komponenten-Webserver verwalten können: die Manipulation von Start und Stop.
C_OBJECT($myComponentWebServer)
$myComponentWebServer :=WEB Server(Web database server)
Werfen wir einen Blick auf seine Eigenschaften:
{ "name": "HDI_WebServerObject_Component1.4dbase", "isRunning": false, "defaultHomepage": "indexComponent1.html", "rootFolder": "/PACKAGE/WebFolder/", "characterSet": 106, "debugLog": 0, "HSTSEnabled": false, "HSTSMaxAge": 63072000, "HTTPCompressionLevel": 1, "HTTPCompressionThreshold": 1024, "HTTPEnabled": true, "HTTPPort": 8080, "HTTPTrace": false, "HTTPSEnabled": true, "HTTPSPort": 4431, "inactiveSessionTimeout": 480, "IPAddressToListen": "0.0.0.0", "keepSession": true, "inactiveProcessTimeout": 480, "logRecording": 0, "maxConcurrentProcesses": 100, "maxRequestSize": -1, "maxSessions": 100, "sessionCookieDomain": "", "sessionCookieName": "4DSID", "sessionCookiePath": "", "sessionIPAddressValidation": true, "minTLSVersion": 3, "openSSLVersion": "OpenSSL 1.1.1d 10 Sep 2019", "perfectForwardSecrecy": false, "cipherSuite": "...", "certificateFolder": "/PACKAGE/WebCertificate/" }
Das Webserver-Objekt enthält auch zwei Methoden, die es Ihnen ermöglichen, den Webserver zu verwalten.
Starten und Stoppen eines Webservers
Mit der Methode start können Sie den Webserver starten. Wenn kein Parameter gesetzt wird, startet er mit den Einstellungen, die in den Datenbankpräferenzen definiert sind.
WEB Server(Web host database server).start()
Mit der Membermethode stop können Sie den Webserver anhalten.
WEB Server(Web host database server).stop()
Wenn Sie einige Einstellungen außer Kraft setzen wollen, erstellen Sie einfach ein Objekt, das die Namen der Attribute enthält, die den gewünschten Einstellungen entsprechen, mit den Werten, die Sie setzen wollen. Für alle anderen Einstellungen werden die aktuellen Datenbankeinstellungen verwendet.
C_OBJECT($myComponentWebServer;$options;$result)
$myComponentWebServer :=WEB Server(Web database server)
$options :=New object("HTTPPort";8081; "defaultHomepage"; "myCompHomepage.html")
$result :=$myComponentWebServer.start($options)
Beachten Sie, dass Sie die Einstellungen nicht direkt ändern können, sondern erst den Webserver anhalten müssen, bevor Sie ihn mit neuen Einstellungen starten.
Auflistung der verfügbaren Webserver
Der Befehl new WEB Server list gibt eine Sammlung von Objekten zurück, die allen verfügbaren Webservern für die Host-Datenbank entsprechen.
C_COLLECTION($webServers)
$webServers :=WEB Server list
Es folgt ein Beispiel für das Ergebnis einer Datenbank mit eigenem Webserver und zwei Komponenten mit eigenem Webserver:
[ {"name": "HDI_WebServerObject_Host", ...} , {"name": "HDI_WebServerObject_Component1", ...} , {"name": "HDI_WebServerObject_Component2", ...} ]
USING DATABASE WEB Methoden
Die Datenbankmethoden „Bei Web-Verbindung“ und „Bei Web-Authentifizierung“ können in der Datenbank aufgerufen werden, die die Anfrage erhält, so wie es bei früheren Host-Datenbank-Webservern immer der Fall war. Wenn zum Beispiel eine Web-Anfrage an einen Komponenten-Webserver gesendet wird und diese Anfrage nicht zu einer vorhandenen Ressource passt, wird die Methode „On Web Connection“ dieser Komponente aufgerufen. Es liegt dann an Ihnen, die Anfrage zu behandeln und zu beantworten, wie es normalerweise der Fall ist.
Was ist mit Protokollen?
Um zu vermeiden, dass die Webserver-Protokolle an mehreren Stellen gesucht werden müssen, haben wir sie im Ordner „Logs“ der Host-Datenbank abgelegt. Wie immer werden die Webserver-Protokolle der Host-Datenbank in ihrem Logs-Ordner gespeichert und jede Komponente hat ihren eigenen Unterordner, der ihre Webserver-Protokolldateien enthält.
Legacy-Webbefehle
Alle Legacy-Webbefehle, die den Webserver der Host-Datenbank manipulieren, zielen immer noch auf die Host-Datenbank, auch wenn sie von einer Komponente aus aufgerufen werden. Das Ausführungsziel eines jeden Legacy-Webbefehls wird in der Dokumentation erläutert.
Nur das neue Webserver-Objekt kann mit dem Webserver der Komponente umgehen. Es liegt also an Ihnen, die verschiedenen Server so zu verwalten, wie Sie wollen!