4D Blog

Home Product Multiple web servers in a single 4D instance

Multiple web servers in a single 4D instance

May 25, 2020

Product

Have you ever needed to use multiple web servers in order to, for example, split your web application code into several business units, or separate the administrator’s web server from the user’s or run an old part, not preemptive-ready yet, in a separate instance, allowing the main part to run preemptive?

If you’re nodding your head yes, then keep reading because 4D v18 R3 allows you to do so … with ease.

Database example

Manipulating web serverS

The new WEB server command allows you to manage web servers within separate objects for each server. It also accepts an optional parameter to define which server to use:

  • Web database server to manipulate the current database web server (the host database or the component database depending on where the command is called)
  • Web host database server to manipulate the host database web server from a component
  • Web request receiving server to manipulate the web server receiving a request, in a web server management common method per example.

RUNNING a component web server

For compatibility reasons, a component web server doesn’t launch itself even if its “Launch web server at startup” parameter is enabled.

To launch the component web server, you must first instantiate its web server object using the WEB server(Web database server) command. It returns an object allowing you to manage the component web server: the manipulation of start and stop.

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

Let’s take a look at its properties :

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

The web server object also includes two member methods which allow you to manage the related web server.

Starting AND STOPPING A web server

The start member method allows you to start the web server. If no parameter is set, it will start using the settings defined in the database preferences.

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

The stop member method allows you to stop the web server.

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

If you want to override some settings, just create an object containing the names of the attributes corresponding to the settings you want to set with the values you want to set. All other settings will use the current database settings.

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

Note that you can’t directly change the settings, you first need to stop the web server before starting it with new settings.

Listing available web servers

The new WEB Server list command returns a collection of objects corresponding to all available web servers for the host database.

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

The following is a sample result from a database running its own web server and two components running their own web servers:

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

USING DATABASE WEB methods

The “On Web Connection” and “On Web Authentication” database methods can be invoked in the database receiving the request, as it has always done with legacy host database web servers. For example, if a web request is sent to a component web server and this request doesn’t fit an existing resource, the “On Web Connection” method of this component is called. It’s up to you to treat the request and reply, as is usually the case.

What about logs?

To avoid searching for web server logs in multiple places, we’ve kept them in the Logs folder of the host database. As always, the web server logs of the host database are stored in its Logs folder and each component has its own subfolder containing its web server log files.

Legacy web commands

All legacy web commands that manipulate the host database web server still target the host database, even if they are called from a component. The execution target of each legacy web command is explained in the documentation. 

Only the new web server object can handle the component’s web server. So it’s up to you to manage the different servers as you want!

 

Discuss

Tags Programming, v18 R3, v19, Web

Latest related posts

  • May 20, 2025

    Automatic Refresh of OEM Build Licenses

  • May 16, 2025

    New class to handle incoming TCP connections

  • April 29, 2025

    Discover your AI-powered writing assistant in 4D Write Pro

Avatar
Damien Fuzeau
• Product Owner •Damien Fuzeau has joined the 4D Product team in February 2019. As a Product Owner, he is in charge of writing user stories, then translating them to functional specifications. His job also entails making sure that the feature implementations delivered are meeting the customer needs.Damien is graduated from the University of Nantes in software engineering. He spent more than 23 years in its former company, first as developer (discovering 4D in 1997), and later as engineering manager and software architect. This company is a 4D OEM partner and deployed 4D based business softwares for thousands users, on hundreds servers. So, Damien is used to 4D development and deployment in a multi-language context.
  • Deutsch
  • Français
  • English
  • Português
  • Čeština
  • Español
  • Italiano
  • 日本語

Categories

Browse categories

  • 4D View Pro
  • 4D Write Pro
  • 4D for Mobile
  • Email
  • Development Mode
  • 4D Language
  • ORDA
  • User Interface / GUI
  • Qodly Studio
  • Server
  • Maintenance
  • Deployment
  • 4D Tutorials
  • Generic
  • 4D Summit sessions and other online videos

Tags

4D-Analyzer 4D for Android 4D for iOS 4D NetKit 4D Qodly Pro 4D View Pro 4D Write Pro 20 R8 20 R9 Administration Authentication Build application CI/CD Class Client/Server Code editor Collections Compatibility settings Formula Listbox Logs Mail Microsoft 365 Network Objects ORDA PDF Pictures Preemptive Programming Qodly Studio REST Scalability Security Session Source control Speed Spreadsheet Tutorial UI User Experience v20 vscode Web Word processor

Tags

4D-Analyzer 4D for Android 4D for iOS 4D NetKit 4D Qodly Pro 4D View Pro 4D Write Pro 20 R8 20 R9 Administration Authentication Build application CI/CD Class Client/Server Code editor Collections Compatibility settings Formula Listbox Logs Mail Microsoft 365 Network Objects ORDA PDF Pictures Preemptive Programming Qodly Studio REST Scalability Security Session Source control Speed Spreadsheet Tutorial UI User Experience v20 vscode Web Word processor
Subscribe to 4D Newsletter

© 2025 4D SAS - All rights reserved
Terms & Conditions | Legal Notices | Data Policy | Cookie Policy | Contact us | Write for us


Subscribe to 4D Newsletter

* Your privacy is very important to us. Please click here to view our Policy

Contact us

Got a question, suggestion or just want to get in touch with the 4D bloggers? Drop us a line!

* Your privacy is very important to us. Please click here to view our Policy