プリエンプティブWebプロセスの使用
4D Webサーバーを使って、コンパイル済みアプリケーションでプリエンプティブWebプロセスを使用することによって、マルチコアコンピューターの利点を最大限引き出すことができます。 4D変換タグや Webデータベースメソッドを含めた Web関連コードを、可能な限り多くのコアで同時に実行するよう設定することが可能です。
4D のプリエンプティブプロセスについての詳細は、ランゲージリファレンス の プリエンプティブ4Dプロセス の章を参照ください。
Webプロセスにおけるプリエンプティブモードの使用可能状況
実行コンテキストによって、プリエンプティブモードが使用される、または使用可能かを次の表に示します:
4D Server | インタープリター (ローカルクライアント接続) | インタープリター (プロジェクト (ローカルクライアント接続なし) またはバイナリ) | コンパイル済みコード |
---|---|---|---|
REST サーバー | コオペラティブ | プリエンプティブ | プリエンプティブ |
Web サーバー | コオペラティブ | コオペラティブ | Web設定 |
Webサービスサーバー | コオペラティブ | コオペラティブ | Web設定 |
旧式REST | コオペラティブ | Web設定 | Web設定 |
4Dリモート/シングルユーザー | インタープリターコード | コンパイル済みコード |
---|---|---|
REST サーバー | コオペラティブ | プリエンプティブ |
Web サーバー | コオペラティブ | Web設定 |
Webサービスサーバー | コオペラティブ | Web設定 |
旧式REST | コオペラティブ | Web設定 |
- REST サーバー: REST で呼び出された ORDA データモデルクラス関数 を処理します
- Web サーバー: Web テンプレート、4DACTION とデータベースメソッド を処理します
- Web サービスサーバー: SOAPリクエストを処理します
- 旧式REST: 4D メソッドへの直りクエスト (
/rest/{table}/{methodName}
) - Web設定 とは、プリエンプティブモード実行が設定によることを表します:
- スケーラブルセッション が選択されている場合、Webプロセスにおいて プリエンプティブモードが自動的に使用されます。
- それ以外の場合は、プリエンプティブプロセスを使用 オプションが考慮されます。
- Webサービスプロセス (サーバーまたはクライアント) のプリエンプティブモードは、メソッドレベルでサポートされています。 公開済みの SOAPサーバーメソッド (4Dで Web サービスを公開する 参照) あるいはプロキシクライアントメソッド (4Dから Web サービスへサブスクライブする 参照) の "プリエンプティブプロセスで実行可能" プロパティをチェックし、メソッドがコンパイラーによってスレッドセーフと確認されるようにします。
スレッドセーフなWebサーバーコードの書き方
Webプロセスをプリエンプティモードで実行するには、Webサーバーで実行されるすべての 4Dコードがスレッドセーフでなければなりません。 ストラクチャー設定ダイアログボックスにおいて プリエンプティブプロセスを使用 オプションがチェックされている場合、アプリケーションの以下の部分が 4Dコンパイラーによって自動的に評価されます:
-
すべての Web関連データベースメソッド:
-
compiler_web
プロジェクトメソッド (実際の "実行モード" プロパティに関わらず評価されます) -
Webコンテキストにおいて
PROCESS 4D TAGS
コマンドによって処理される基本的にすべてのコード (.shtmlページを通して実行されるものなど) -
"公開オプション: 4DタグとURL (
4DACTION
)..." 属性が有効なプロジェクトメソッド。 -
"RESTリソースとして公開" 属性が有効なテーブルのトリガー
-
REST で呼び出された ORDA データモデルクラス関数
-
"REST サーバー" プロパティを選択されたプロジェクトメソッド (旧式RESTコール)
これらそれぞれのメソッドとコードの部分について、スレッドセーフのルールが遵守されているかをコンパイラーがチェックし、問題があった場合にはエラーを返します。 スレッドセーフルールについての詳細は、4Dランゲージリファレンス マニュアルの プロセス の章の スレッドセーフなメソッドの書き方 の段落を参照ください。
4D Webコードのスレッドセーフティ
Web関連のほとんどの 4Dコマンドや関数、データベースメソッド、そして URL がスレッドセーフとなり、プリエンプティモードで使用できます。
4Dコマンドとデータベースメソッド
すべての Web関連コマンドはスレッドセーフです:
- Webサーバー テーマの全コマンド
- HTTPクライアント テーマの全コマンド
Web関連のデータベースメソッドもスレッドセーフであり、プリエンプティモードで使用することが可能です: On Web Authentication
, On Web Connection
, On REST Authentication
...)。
もちろん、これらのメソッドによって実行されるコードもまたスレッドセーフである必要があります。
WebサーバーURL
以下の 4D WebサーバーURLはスレッドセーフであり、プリエンプティモードで使用可能です:
- 4daction/ (呼び出されるプロジェクトメソッドもまたスレッドセーフでなければいけません)
- 4dcgi/ (呼び出されるデータベースメソッドもまたスレッドセーフでなければいけません)
- 4dwebtest/
- 4dblank/
- 4dstats/
- 4dhtmlstats/
- 4dcacheclear/
- rest/
- 4dimgfield/ (ピクチャーフィールドの Webリクエストに対し
PROCESS 4D TAGS
によって生成されます) - 4dimg/ (ピクチャー変数の Webリクエストに対し
PROCESS 4D TAGS
によって生成されます)
プリエンプティブWebプロセスアイコン
ランタイムエクスプローラーと 4D Server管理ウィンドウの両方において、プリエンプティブな Webプロセスに対し専用アイコンが表示されるようになりました:
プロセスタイプ | アイコン |
---|---|
プリエンプティブWebメソッド |