客户端/服务器实现

<ph type="x-smartling-placeholder"></ph> 报告问题 查看来源 敬上 每晚 · 7.3。 · 7.2 条 · 7.1 · 7.0。 · 6.5

Bazel 系统实现为长期有效的服务器进程。这样, 执行许多在面向批处理的实现中无法实现的优化, 例如缓存 BUILD 文件、依赖关系图以及其他元数据 打造新时代。这提高了增量构建的速度,并允许 buildquery 等用于共享相同缓存的 因此查询速度很快每个服务器最多只能处理一个 每次调用一次如果继续存在,则后续调用将阻塞或 快速失败(请参阅 --block_for_lock)。

当您运行 bazel 时,您就是在运行客户端。客户端找到服务器 根据输出基准,默认为 取决于基本工作区目录的路径以及您的 userid,因此如果 在多个工作区中构建项目时,会有多个输出库 运行多个 Bazel 服务器进程同一工作站上的多个用户可以 在同一个工作区中同时构建,因为它们的输出基准不同 (不同的用户 ID)。

如果客户端找不到正在运行的服务器实例,则会启动一个新的服务器实例。它 方法是检查输出库是否已经存在,这意味着 blaze 归档文件已解压否则,如果输出基准不存在, 客户端会解压缩归档文件,并将 mtime 设置为 9 年 。安装后,客户端将确认mtime 解压缩后的文件与下载日期相差无几,以确保安装不会被篡改 发生了什么情况。

服务器进程将在一段时间(默认为 3 小时, 可使用启动选项 --max_idle_secs 进行修改)。对于 这部分是用户看不到正在运行服务器这一事实, 有时候,牢记这一点会很有帮助例如,如果您在运行脚本 在不同目录中执行大量自动构建的应用,请务必 确保不会积累大量空闲服务器;为此,您可以 在使用完这些文件后明确关闭它们,或者指定 短超时时间。

Bazel 服务器进程的名称显示在 ps xps -e f 的输出中 为 bazel(dirname),其中 dirname 是 包含工作区目录根目录的目录。例如:

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

这样更便于找出哪个服务器进程属于指定的 工作区。(请注意,如果使用 ps 的其他选项,Bazel 服务器 进程可以仅命名为 java)。您可以使用 关停命令。

运行 bazel 时,客户端首先检查服务器是否合适 version;如果不是,系统会停止该服务器,并启动一个新的服务器。这样可以确保 使用长时间运行的服务器进程不会干扰 版本控制