Socket 接口
Watchman 最简单的用法是调用 watchman 二进制文件并处理其输出。有时,希望避免额外的进程开销,并直接与您的 watchman 服务通信。
watchman 服务作为每个用户的单个长期运行进程运行。如有必要,watchman 二进制文件将负责生成服务器进程。
服务器将创建一个 unix 域套接字,用于与其客户端通信。套接字的位置取决于编译时选项和命令行标志。建议您调用 watchman get-sockname
来发现该位置,或者,如果您是通过触发器调用(自 2.9.7 版起),您将在 $WATCHMAN_SOCK
环境变量中找到该位置。
Watchman 协议
unix 套接字实现了一个请求-响应协议,其 PDU 编码为 JSON 或 BSER 表示形式。一些 watchman 命令(特别是 subscribe
和 log-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 编码响应。
报告错误和警告
如果响应包含名为 error
的字段,则表示该请求未成功。 error
字段(如果存在)是一个字符串值,可以呈现给用户。
如果响应包含名为 warning
的字段,则表示存在某些条件应报告回给用户,以便系统可以更有效地运行。工具应将其作为建议显示给用户。在撰写本文时,这可能是由于文件监视资源超出系统限制而触发的。 这些对于解决问题非常重要,这样就不会错过事件,从而保持正确性和系统性能。
警告消息包含指向此文档的链接,该文档提供了有关调整和解决问题的建议。