跳到主要内容

Socket 接口

Watchman 最简单的用法是调用 watchman 二进制文件并处理其输出。有时,希望避免额外的进程开销,并直接与您的 watchman 服务通信。

watchman 服务作为每个用户的单个长期运行进程运行。如有必要,watchman 二进制文件将负责生成服务器进程。

服务器将创建一个 unix 域套接字,用于与其客户端通信。套接字的位置取决于编译时选项和命令行标志。建议您调用 watchman get-sockname 来发现该位置,或者,如果您是通过触发器调用(自 2.9.7 版起),您将在 $WATCHMAN_SOCK 环境变量中找到该位置。

Watchman 协议

unix 套接字实现了一个请求-响应协议,其 PDU 编码为 JSON 或 BSER 表示形式。一些 watchman 命令(特别是 subscribelog-level)允许 watchman 服务单方面向客户端发送任意数量的 PDU,并且需要更多有状态的处理。

JSON 编码

JSON 编码将请求或响应表示为单行紧凑的 JSON 编码数据。换行符用于检测 PDU 的结束。

来自客户端的请求始终表示为 JSON 数组。

来自服务器的响应始终表示为 JSON 对象。

发送 since 命令仅仅是将其格式化为 JSON。请注意,JSON 文本必须是单行(不要发送美化打印的版本!),并且后跟一个换行符 \n

["since", "/path/to/src", "n:c_srcs", "*.c"] <NEWLINE>

BSER 编码

BSER 是一种本地专用的二进制序列化格式,可以表示与 JSON 相同的数据类型,但形式更紧凑,并且不限于字符串的 UTF-8 表示形式。

当您使用 BSER 发出请求时,服务器将以 BSER 编码响应。

您可以在 BSER 规范中阅读更多关于 BSER 的信息

报告错误和警告

如果响应包含名为 error 的字段,则表示该请求未成功。 error 字段(如果存在)是一个字符串值,可以呈现给用户。

如果响应包含名为 warning 的字段,则表示存在某些条件应报告回给用户,以便系统可以更有效地运行。工具应将其作为建议显示给用户。在撰写本文时,这可能是由于文件监视资源超出系统限制而触发的。 这些对于解决问题非常重要,这样就不会错过事件,从而保持正确性和系统性能。

警告消息包含指向此文档的链接,该文档提供了有关调整和解决问题的建议。