1つの4Dインスタンスに複数のウェブサーバを搭載

Deeplからの自動翻訳

例えば、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 コマンドは、たとえコンポーネントから呼び出されたとしても、ホストデータベースをターゲットにします。各レガシーウェブコマンドの実行対象は、ドキュメントで説明されています。

コンポーネントのウェブサーバを扱えるのは、新しいウェブサーバオブジェクトだけです。ですから、異なるサーバを好きなように管理するのはあなた次第です!

Avatar
- プロダクトオーナー - Damien Fuzeauは、2019年2月に4D Productチームに参加しました。プロダクトオーナーとして、ユーザーストーリー(ユーザーが期待する新機能とその使用法)を書き、それを具体的な機能仕様に変換することを担当しています。また、実装された機能が顧客のニーズを満たしているかどうかを確認することも彼の役割です。ナント大学のソフトウェア工学科を卒業。前職の会社では最初は開発者として(1997年に4Dを発見)、後にエンジニアリングマネージャーとソフトウェアアーキテクトとして、23年以上勤務しました。この会社は、4DのOEMパートナーであり、現在は数千のユーザーと数百のサーバーに向けて4Dベースのビジネスソフトを展開しています。ですから、Damienは、多言語環境での4D開発・導入に慣れています。