Mehrere Webserver in einer einzigen 4D Instanz

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.

Datenbank-Beispiel

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!

Avatar
- Product Owner - Damien Fuzeau ist seit Februar 2019 Mitglied des 4D Produktteams. Als Product Owner ist er für das Schreiben von User Stories zuständig, die er dann in funktionale Spezifikationen umsetzt. Zu seinen Aufgaben gehört es auch, dafür zu sorgen, dass die gelieferten Funktionsimplementierungen den Anforderungen der Kunden entsprechen. Damien hat an der Universität von Nantes einen Abschluss in Softwaretechnik gemacht. Er verbrachte mehr als 23 Jahre in seinem früheren Unternehmen, zunächst als Entwickler (er entdeckte 4D im Jahr 1997) und später als technischer Leiter und Softwarearchitekt. Dieses Unternehmen ist ein 4D OEM Partner und hat 4D basierte Geschäftssoftware für Tausende von Usern auf Hunderten von Servern eingesetzt. Damien ist also mit der Entwicklung und dem Einsatz von 4D in einem mehrsprachigen Kontext vertraut.