Varios servidores web en una sola instancia de 4D

Traducido automáticamente de Deepl

¿Alguna vez ha necesitado utilizar múltiples servidores web para, por ejemplo, dividir el código de su aplicación web en varias unidades de negocio, o separar el servidor web del administrador del del usuario o ejecutar una parte antigua, aún no preparada para el preemptive, en una instancia separada, permitiendo que la parte principal se ejecute en preemptive?

Si asiente con la cabeza, siga leyendo porque 4D v18 R3 le permite hacerlo… con facilidad.

Ejemplo de base de datos

Manipulación de servidores webS

El nuevo WEB server le permite gestionar los servidores web dentro de objetos separados para cada servidor. También acepta un parámetro opcional para definir qué servidor utilizar:

  • Web database server para manipular el servidor web de la base de datos actual (la base de datos anfitriona o la base de datos componente, dependiendo de dónde se llame el comando)
  • Web host database server para manipular el servidor web de la base de datos anfitriona desde un componente
  • Web request receiving server para manipular el servidor web que recibe una petición, en un método común de gestión de servidores web por ejemplo.

EJECUCIÓN de un servidor web de componentes

Por razones de compatibilidad, un servidor web de componentes no se lanza por sí mismo aunque su parámetro «Lanzar el servidor web al inicio» esté activado.

Para lanzar el servidor web del componente, primero debe instanciar su objeto servidor web utilizando el comando WEB server(Web database server). Devuelve un objeto que permite gestionar el componente servidor web: la manipulación de start y stop.

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

Veamos sus propiedades:

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

El objeto servidor web también incluye dos métodos miembros que permiten gestionar el servidor web relacionado.

Iniciar y detener un servidor web

El método miembro start permite iniciar el servidor web. Si no se establece ningún parámetro, se iniciará utilizando la configuración definida en las preferencias de la base de datos.

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

El método miembro stop permite detener el servidor web.

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

Si quieres anular algunas configuraciones, sólo tienes que crear un objeto que contenga los nombres de los atributos correspondientes a las configuraciones que quieras establecer con los valores que quieras establecer. Todos los demás ajustes utilizarán la configuración actual de la base de datos.

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

Tenga en cuenta que no puede cambiar directamente la configuración, primero debe detener el servidor web antes de iniciarlo con la nueva configuración.

Listado de servidores web disponibles

El comando new WEB Server list devuelve una colección de objetos correspondientes a todos los servidores web disponibles para la base de datos anfitriona.

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

A continuación se muestra el resultado de una base de datos que ejecuta su propio servidor web y dos componentes que ejecutan sus propios servidores web:

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

métodos de USO DE LA BASE DE DATOS WEB

Los métodos de base de datos «On Web Connection» y «On Web Authentication» pueden invocarse en la base de datos que recibe la petición, como siempre se ha hecho con los servidores web de base de datos heredados. Por ejemplo, si se envía una solicitud web a un servidor web de componentes y esta solicitud no se ajusta a un recurso existente, se llama al método «On Web Connection» de este componente. Es usted quien debe tratar la solicitud y responder, como suele ser el caso.

¿Qué pasa con los registros?

Para evitar buscar los registros del servidor web en varios lugares, los hemos guardado en la carpeta Logs de la base de datos del host. Como siempre, los registros del servidor web de la base de datos anfitriona se almacenan en su carpeta Logs y cada componente tiene su propia subcarpeta que contiene sus archivos de registro del servidor web.

Comandos web heredados

Todos los comandos web heredados que manipulan el servidor web de la base de datos anfitriona siguen teniendo como objetivo la base de datos anfitriona, incluso si se llaman desde un componente. El objetivo de ejecución de cada comando web heredado se explica en la documentación.

Sólo el nuevo objeto servidor web puede manejar el servidor web del componente. ¡Así que depende de ti manejar los diferentes servidores como quieras!

Avatar
• Propietario de producto - Damien Fuzeau se ha unido al equipo de 4D Product en febrero de 2019. Como Propietario de producto, está a cargo de escribir historias de usuario, y luego traducirlas a especificaciones funcionales. Su trabajo también implica asegurarse de que las implementaciones de funcionalidades entregadas estén cumpliendo con las necesidades del cliente. Damien es licenciado en ingeniería de software por la Universidad de Nantes. Estuvo más de 23 años en su anterior empresa, primero como desarrollador (descubriendo 4D en 1997), y más tarde como gerente de ingeniería y arquitecto de software. Esta compañía es un Partner OEM de 4D y ha desplegado softwares empresariales basados en 4D para miles de usuarios, en cientos de servidores. Por lo tanto, Damien está acostumbrado al desarrollo y despliegue de 4D en un contexto multilingüe.