Více webových serverů v jedné instanci 4D

Automaticky přeloženo z Deepl

Potřebovali jste někdy použít více webových serverů, abyste například rozdělili kód webové aplikace do několika obchodních jednotek, oddělili webový server správce od uživatelského nebo spustili starou část, která ještě není připravena na preempci, v samostatné instanci a umožnili hlavní části běžet preemptivně?

Pokud přikyvujete hlavou, že ano, pak čtěte dál, protože 4D v18 R3 vám to umožní … snadno.

Příklad databáze

Manipulace s webovým serveremS

Nový WEB server příkaz umožňuje spravovat webové servery v rámci samostatných objektů pro každý server. Přijímá také volitelný parametr, který určuje, který server se má použít:

  • Web database server pro manipulaci s aktuálním webovým serverem databáze (hostitelskou databází nebo databází komponenty v závislosti na tom, odkud je příkaz volán).
  • Web host database server manipulace s webovým serverem hostitelské databáze z komponenty
  • Web request receiving server manipulovat s webovým serverem, který přijímá požadavek, ve společné metodě správy webového serveru na příklad.

Spuštění webového serveru komponenty

Z důvodů kompatibility se webový server komponenty nespustí sám, i když je povolen jeho parametr „Spustit webový server při spuštění“.

Chcete-li spustit webový server komponenty, musíte nejprve instancovat jeho objekt webového serveru pomocí příkazu WEB server(Web database server). Příkaz vrací objekt umožňující správu webového serveru komponenty: manipulaci se spuštěním a zastavením.

C_OBJECT($myComponentWebServer)
$myComponentWebServer :=WEB Server(Web database server)

Podívejme se na jeho vlastnosti :

{
    "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/"
}

Objekt webového serveru obsahuje také dvě členské metody, které umožňují spravovat příslušný webový server.

Spuštění a zastavení webového serveru

Členská metoda start umožňuje spustit webový server. Pokud není zadán žádný parametr, spustí se pomocí nastavení definovaných v předvolbách databáze.

WEB Server(Web host database server).start()

Členská metoda stop umožňuje zastavit webový server.

WEB Server(Web host database server).stop()

Pokud chcete některá nastavení přepsat, stačí vytvořit objekt obsahující názvy atributů odpovídajících nastavením, která chcete nastavit, s hodnotami, které chcete nastavit. Všechna ostatní nastavení budou používat aktuální nastavení databáze.

C_OBJECT($myComponentWebServer;$options;$result)
$myComponentWebServer :=WEB Server(Web database server)
$options :=New object("HTTPPort";8081; "defaultHomepage"; "myCompHomepage.html")
$result :=$myComponentWebServer.start($options)

Všimněte si, že nastavení nelze měnit přímo, je třeba nejprve zastavit webový server a teprve poté jej spustit s novým nastavením.

Výpis dostupných webových serverů

Nový WEB Server list příkaz vrátí kolekci objektů odpovídajících všem dostupným webovým serverům pro hostitelskou databázi.

C_COLLECTION($webServers)
$webServers :=WEB Server list

Následuje ukázka výsledku databáze, na které běží vlastní webový server, a dvou komponent, na kterých běží vlastní webové servery:

[
{"name": "HDI_WebServerObject_Host", ...}
,
{"name": "HDI_WebServerObject_Component1", ...}
,
{"name": "HDI_WebServerObject_Component2", ...}
]

POUŽITÍ WEBU DATABÁZE metody

Databázové metody „On Web Connection“ a „On Web Authentication“ mohou být vyvolány v databázi přijímající požadavek, stejně jako tomu bylo vždy u starších webových serverů hostitelské databáze. Pokud je například na webový server komponenty odeslán webový požadavek a tento požadavek neodpovídá existujícímu zdroji, je zavolána metoda „On Web Connection“ této komponenty. Je na vás, jak s požadavkem naložíte a jak na něj odpovíte, jak tomu obvykle bývá.

A co protokoly?

Abychom nemuseli hledat protokoly webového serveru na více místech, uložili jsme je do složky Logs v databázi hostitele. Protokoly webového serveru hostitelské databáze jsou jako vždy uloženy v její složce Logs a každá komponenta má vlastní podsložku obsahující soubory protokolu webového serveru.

Starší webové příkazy

Všechny starší webové příkazy, které manipulují s webovým serverem hostitelské databáze, se stále zaměřují na hostitelskou databázi, i když jsou volány z komponenty. Cíl provedení každého staršího webového příkazu je vysvětlen v dokumentaci.

S webovým serverem komponenty může manipulovat pouze nový objekt webového serveru. Je tedy na vás, abyste různé servery spravovali podle svých představ!

Avatar
• Product Owner • Damien Fuzeau se připojil k týmu 4D Product v únoru 2019. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich následný převod do funkčních specifikací. Jeho úkolem je také zajistit, aby dodávané implementace funkcí vyhovovaly potřebám zákazníků. Damien vystudoval softwarové inženýrství na University of Nantes. Ve své bývalé společnosti strávil více než 23 let, nejprve jako vývojář (objevil 4D v roce 1997) a později jako technický manažer a softwarový architekt. Tato společnost je partnerem 4D OEM a nasadila obchodní software založený na 4D pro tisíce uživatelů na stovkách serverů. Damien je tedy zvyklý na 4D vývoj a nasazení ve vícejazyčném kontextu.