クライアントとサーバーの実装

<ph type="x-smartling-placeholder"></ph> 問題を報告する ソースを表示 夜間 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bazel システムは、有効期間が長いサーバー プロセスとして実装されています。これにより、 バッチ指向の実装では不可能な多くの最適化を BUILD ファイル、依存関係グラフ、その他のメタデータを 1 つの 次世代の基盤となります。これにより、増分ビルドの速度が向上し、 buildquery などの異なるコマンドを使用して、同じキャッシュを クエリが非常に高速になります。

bazel を実行すると、クライアントが実行されます。クライアントがサーバーを見つける 出力ベースに基づいて作成されます。デフォルトでは、 ユーザー ID が使用されます。したがって、複数のワークスペースでビルドする場合は、 出力ベースが複数あるため、Bazel サーバー プロセスも複数になります。 同じワークステーション上の複数のユーザーが同じデータベースで同時にビルドできます。 出力ベースが異なる(ユーザー ID が異なる)可能性があるためです。

実行中のサーバー インスタンスが見つからなければ、クライアントは新しいインスタンスを起動します。これは、 出力ベースがすでに存在するかどうかを確認することで行います。 アーカイブはすでに展開されています。出力ベースが存在しない場合は、 クライアントがアーカイブのファイルを解凍し、mtime を 9 年の日付に設定します。 使用できます。インストール後、クライアントは、このアプリケーションの mtime が 解凍したファイルは、インストールの改ざんを防ぐために、はるかに古い日付と等しい 発生します。

サーバー プロセスは、非アクティブ状態(デフォルトでは 3 時間、 これは起動オプション --max_idle_secs で変更できます)。最大のメリット サーバーが稼働中であることは ユーザーにはわかりませんが それを念頭に置くと良い場合がありますたとえば、Python や Curl など、 多数の自動ビルドを実行するアプリの場合、 アイドル状態のサーバーが大量に蓄積しないようにします。これを行うには、 終了したら明示的にシャットダウンするか、 短いタイムアウト期間があります。

Bazel サーバー プロセスの名前が ps x または ps -e f の出力に表示されます。 bazel(dirname) の形式。ここで、dirname はアプリケーションのベース名です。 ディレクトリを作成します。例:

ps -e f
16143 ?        Sl     3:00 bazel(src-johndoe2) -server -Djava.library.path=...

これにより、特定のプロセスがどのサーバー プロセスに属しているかを簡単に できます。(ps、Bazel サーバーに対する他のオプションがあるので注意してください)。 Bazel サーバーは java という名前を付けることができます)。 shutdown コマンドを使用します。

bazel を実行すると、クライアントはまずサーバーが適切であることを確認します。 version;そうでない場合、サーバーは停止して新しいサーバーが起動します。これにより 長時間実行されるサーバー プロセスを使用しても、 説明します。