Server web multipli in un’unica istanza 4D

Tradotto automaticamente da Deepl

Avete mai avuto la necessità di utilizzare più server web per, ad esempio, suddividere il codice della vostra applicazione web in diverse unità aziendali, o separare il server web dell’amministratore da quello dell’utente o eseguire una vecchia parte, non ancora pronta per la prelazione, in un’istanza separata, consentendo alla parte principale di funzionare in prelazione?

Se state facendo cenno di sì, continuate a leggere perché 4D v18 R3 vi permette di farlo… con facilità.

Esempio di database

Manipolazione dei server webS

Il nuovo WEB server consente di gestire i server web all’interno di oggetti separati per ciascun server. Accetta anche un parametro opzionale per definire quale server utilizzare:

  • Web database server per manipolare il server web del database corrente (il database host o il database del componente, a seconda di dove viene chiamato il comando)
  • Web host database server manipolare il server Web del database host da un componente
  • Web request receiving server manipolare il server Web che riceve una richiesta, in un metodo comune di gestione del server Web, ad esempio.

ESECUZIONE di un server web componente

Per motivi di compatibilità, il server web di un componente non si avvia da solo, anche se il suo parametro “Avvia server web all’avvio” è abilitato.

Per lanciare il server web del componente, è necessario istanziare il suo oggetto server web con il comando WEB server(Web database server). Il comando restituisce un oggetto che consente di gestire il server web del componente: la manipolazione di start e stop.

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

Diamo un’occhiata alle sue proprietà:

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

L’oggetto web server comprende anche due metodi membri che consentono di gestire il relativo web server.

Avvio e arresto di un server Web

Il metodo membro start consente di avviare il server Web. Se non viene impostato alcun parametro, si avvierà utilizzando le impostazioni definite nelle preferenze del database.

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

Il metodo membro stop consente di arrestare il server Web.

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

Se si desidera sovrascrivere alcune impostazioni, è sufficiente creare un oggetto contenente i nomi degli attributi corrispondenti alle impostazioni da impostare con i valori desiderati. Tutte le altre impostazioni utilizzeranno le impostazioni correnti del database.

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

Si noti che non è possibile modificare direttamente le impostazioni; è necessario arrestare il server web prima di avviarlo con le nuove impostazioni.

Elenco dei server web disponibili

Il comando nuovo WEB Server list restituisce un insieme di oggetti corrispondenti a tutti i server web disponibili per il database host.

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

Di seguito sono riportati i risultati di un database che esegue il proprio server web e di due componenti che eseguono i propri server web:

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

UTILIZZO DEI METODI WEB DEL DATABASE

I metodi di database “On Web Connection” e “On Web Authentication” possono essere invocati nel database che riceve la richiesta, come è sempre stato fatto con i server web dei database host legacy. Ad esempio, se una richiesta web viene inviata al server web di un componente e questa richiesta non corrisponde a una risorsa esistente, viene richiamato il metodo “On Web Connection” di questo componente. Spetta all’utente trattare la richiesta e rispondere, come avviene di solito.

E i log?

Per evitare di cercare i log del server web in più posti, li abbiamo conservati nella cartella Logs del database dell’host. Come sempre, i registri del server web del database host sono memorizzati nella sua cartella Logs e ogni componente ha una propria sottocartella contenente i file di registro del server web.

Comandi web legacy

Tutti i comandi web legacy che manipolano il server web del database host hanno come obiettivo il database host, anche se vengono richiamati da un componente. Il target di esecuzione di ciascun comando web legacy è spiegato nella documentazione.

Solo il nuovo oggetto server web può gestire il server web del componente. Sta quindi a voi gestire i diversi server come meglio credete!

Avatar
- Product Owner -Damien Fuzeau è entrato a far parte del team 4D Product nel febbraio 2019. In qualità di Product Owner, si occupa di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo lavoro consiste anche nell'assicurarsi che le implementazioni delle funzionalità fornite soddisfino le esigenze dei clienti.Damien si è laureato all'Università di Nantes in ingegneria del software. Ha trascorso più di 23 anni nella sua precedente azienda, prima come sviluppatore (scoprendo 4D nel 1997), poi come responsabile dell'ingegneria e architetto software. Questa azienda è un partner OEM di 4D e ha distribuito software aziendali basati su 4D per migliaia di utenti, su centinaia di server. Damien è quindi abituato allo sviluppo e alla distribuzione di 4D in un contesto multilingue.