例えば、Webアプリケーションのコードをいくつかのビジネスユニットに分割したり、管理者用のWebサーバーをユーザー用から分離したり、まだプリエンプティブに対応していない古い部分を別のインスタンスで実行して、メイン部分をプリエンプティブに実行できるようにするために、複数のWebサーバーを使用する必要があったことがありますか。
4D v18 R3では、このようなことが簡単にできるようになります。
ウェブサーバーを操作するS
新しい WEB serverコマンドを使用すると、各サーバを別々のオブジェクトで管理することができます。また、オプションのパラメータで、使用するサーバを定義することができます。
- Web database server 現在のデータベースのウェブサーバーを操作する(コマンドが呼び出された場所によって、ホストデータベースまたはコンポーネントデータベース)
- Web host database server コンポーネントからホストデータベースウェブサーバを操作する
- Web request receiving server を操作して、リクエストを受信したWebサーバーを操作する、例あたりのWebサーバー管理共通メソッドで。
コンポーネントWebサーバーを起動する
互換性のため、コンポーネントの Web サーバーは、”Launch web server at startup” パラメーターが有効でも、自分自身は起動しません。
コンポーネントのウェブサーバを起動するには、まずそのウェブサーバオブジェクトを WEB server(Web database server) コマンドを使用して、その Web サーバーオブジェクトをインスタンス化する必要があります。このコマンドは、コンポーネントのウェブサーバーを管理するためのオブジェクトを返します:スタートとストップの操作です。
C_OBJECT($myComponentWebServer)
$myComponentWebServer :=WEB Server(Web database server)
では、そのプロパティを見てみましょう。
{ "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/" }
Web サーバーオブジェクトには、関連する Web サーバーを管理するための 2 つのメ ンバーメソッドも含まれています。
Webサーバーの起動と停止
start メンバメソッドにより、ウェブサーバーを起動することができます。パラメータが設定されていない場合は、データベース環境設定で定義された設定を使用して開始されます。
WEB Server(Web host database server).start()
stop メンバ・メソッドを使用すると、Web サーバーを停止できます。
WEB Server(Web host database server).stop()
いくつかの設定を上書きしたい場合は、設定したい設定に対応する属性の名前を、設定したい値とともに含むオブジェクトを作成するだけです。それ以外の設定は、現在のデータベースの設定を使用します。
C_OBJECT($myComponentWebServer;$options;$result)
$myComponentWebServer :=WEB Server(Web database server)
$options :=New object("HTTPPort";8081; "defaultHomepage"; "myCompHomepage.html")
$result :=$myComponentWebServer...start($options
)
なお、設定を直接変更することはできません。まず、Webサーバーを停止してから、新しい設定で起動する必要があります。
利用可能なウェブサーバーのリストアップ
新しい WEB Server listコマンドは、ホストデータベースで利用可能なすべてのウェブサーバーに対応するオブジェクトのコレクションを返します。
C_COLLECTION($webServers)
$webServers :=WEB Server list
以下は、独自のウェブサーバーを実行しているデータベースと、独自のウェブサーバーを実行している2つのコンポーネントからの結果の例です。
[ {"name": "HDI_WebServerObject_Host", ...} , {"name": "HDI_WebServerObject_Component1", ...} , {"name": "HDI_WebServerObject_Component2", ...} ]
USING DATABASE WEB メソッド
On Web Connection” と “On Web Authentication” のデータベースメソッドは、レガシーなホストデータベースのウェブサーバーで常に行われてきたように、リクエストを受け取るデータベースで呼び出すことができます。たとえば、Web リクエストがコンポーネントの Web サーバーに送信され、 このリクエストが既存のリソースに適合しない場合、このコンポーネントの “On Web Connection” メソッドが呼び出されます。リクエストの処理と返信は、通常通りあなた次第です。
ログはどうする?
ウェブサーバーのログを複数の場所で検索するのを避けるため、ホストデータベースの Logs フォルダに保存しています。いつものように、ホストデータベースの Web サーバーログは、その Logs フォルダに保存され、各コンポーネントは、その Web サーバーログファイルを含む独自のサブフォルダを持っています。
レガシーウェブコマンド
ホストデータベース Web サーバーを操作するすべてのレガシー Web コマンドは、たとえコンポーネントから呼び出されたとしても、ホストデータベースをターゲットにします。各レガシーウェブコマンドの実行対象は、ドキュメントで説明されています。
コンポーネントのウェブサーバを扱えるのは、新しいウェブサーバオブジェクトだけです。ですから、異なるサーバを好きなように管理するのはあなた次第です!