跳到正文

检查器 ​

检查器是所有工具共用的同一条时间线:每条 OSC 消息、每个数据报、每次 HTTP 交换、每次 MQTT 发布、每条 WebSocket 消息、每个中继的数据包和模拟器的交互都会落入其中,附带其构成的字节,并已解码。用它来查看实际上线上传了什么、以什么顺序,以及它遭遇了什么。

它位于底部面板中,是控制台旁边的 检查器 标签页,因此在每个界面上都能找到。点击该标签页即可打开;面板打开时的高度足以容纳几行和一帧的详情。⤢ 按钮(与窗口同高)会让面板高至整个窗口。关闭面板或切换界面时,检查器会保留其列表和选择。

捕获 ​

Signal Lab 启动时捕获是关闭的,关闭期间没有任何开销:工具甚至不会构建帧。

  1. 打开 检查器 标签页。
  2. 按 启用捕获。标签页上的圆点会变红并跳动。
  3. 使用任意工具。帧会出现在列表顶部,最新的在最前。
  4. 得到所需内容后,按 停用捕获。

无论您在哪个界面,标签页都会显示已捕获了多少帧。

帧从您开启捕获的那一刻起被捕获,绝不追溯之前:先开启,再发送。

在服务器上,捕获属于服务器:登录到它的每个页面看到的都是相同的帧,在一个页面上开启或清除捕获,会对所有页面生效。

捕获的内容 ​

工具帧数量
OSC:发送发送的每条消息每一条
OSC:监视器收到的每个数据包;无法解码的会标出解码错误每一个
OSC:信号生成器发送的消息每 100 ms 最多一条,标为 sampled
广播:发送一次每个数据报,每个目标一个;发送失败时附带其错误每一个
广播:信标发送的数据报每 50 ms 最多一个
广播:发现监听器收到的探测每 40 ms 最多一个
广播:发现监听器它的应答(auto-reply)每一个
HTTP:发送、信号、实验请求每次交换:请求行、状态和时间、响应标头和正文开头每一次
HTTP:负载突发,以及负载下的请求交换每 100 ms 最多一次
MQTT:连接发送的发布每一次
MQTT:连接收到的消息每 200 ms 最多一条
MQTT:当界面未连接到其代理时发送的 MQTT 信号该次发布每一次
WebSocket发送和接收的消息流量较小时每一条;每秒最多 200 条
模拟器到达的内容和回复,合在一起每 10 ms 最多一次交换
网络损伤每个中继的数据报或数据块,两个方向,附带其命运两个方向合计每 25 ms 最多一个
风暴(UDP)洪泛数据包,全部相同每秒一个,标为 sampled 1/s;TCP 风暴不捕获任何内容
扫描器每个开放端口,附带其横幅每一个
实验一次运行的步骤发送的内容(TCP 消息:写入的载荷和读到的应答),以及其等待节点接收的内容与其所用工具相同

会采样的工具会故意省略其余内容,并对它们计数:它随后绘制的下一帧会在其判定中说明它扣下了多少,形式为 +n not shown(sampled · +5 not shown)。计数针对的是工具本应绘制的内容,而不是捕获自身的丢弃(见计数与缺口)。

帧列表 ​

列内容
时间捕获的时间,精确到毫秒。
方向→ 已发送(tx),← 已接收(rx)。对于中继,→ 是客户端到目标,← 是目标到客户端。
协议osc、udp、tcp、http、mqtt 或 ws。
对端对端:一个 IP:port、一个 URL、一个代理。
字节帧的大小。
摘要以协议自身记法表示的一行,例如 /fader/1 0.75 或 GET http://127.0.0.1:8080/ → 200 in 3ms。
判定它遭遇了什么,在有内容可说时。

判定分为绿色、琥珀色或红色。红色表示丢失或失败(dropped (loss)、failed、error: …);琥珀色表示帧被改动,或只是一批中的样本(corrupted、copy 2/2、sampled、+n not shown);其余为绿色。您会遇到的一些判定:

判定来源含义
forwarded +42ms网络损伤在该延时之后转发;其后可能跟随 · corrupted、· reordered 或 · copy 1/2。
dropped (loss)、dropped (burst)、dropped (offline)网络损伤被故意丢弃,以及原因。
throttled网络损伤被带宽限制丢弃。
· client→target、· target→client网络损伤结束每个中继帧的判定,位于任何 +n not shown 之前:它的去向。
#2 → 200 OK · 37 B、— → 404 …模拟器哪条规则应答(—:没有)以及应答内容。
down、down → 503模拟器它在模拟器停机期间到达。
200 OK、failedHTTP响应状态,或根本没有响应。
open扫描器一个开放端口。
auto-reply发现监听器向探测发送的应答。
clears retainedMQTT一次空的保留发布。
+n not shown任何会采样的工具自上一帧以来有这么多帧被省略;它会在 · 之后跟随该帧的其他判定。

列表保留最新的 4000 帧,并绘制与筛选条件匹配的最新 300 帧;在筛选器下方会显示它显示了匹配中的多少。

筛选 ​

  • 在文本字段(按地址、对端、来源筛选…)中输入,以保留摘要、对端、来源、协议或判定包含该文本的帧。
  • 点击协议标签(osc、udp、tcp、http、mqtt、ws)以仅显示这些协议。没有标签开启时,显示所有协议。
  • 点击 tx 或 rx 以仅显示已发送或仅显示已接收的帧。
  • 重置 会清除全部三项。

筛选只改变列表显示的内容。捕获、计数和导出始终涵盖全部内容。

暂停与清空 ​

暂停视图 会冻结列表,以便您在流量继续时阅读它;捕获仍在继续。恢复视图 会再次接纳新帧。视图暂停期间到达的帧不会被加入列表,但它们仍在捕获中和导出中。

清除 会清空列表和捕获,并重置其计数。

计数与缺口 ​

顶部的条会统计已捕获的帧及其字节数,以及捕获的充满程度(保留的帧数,共 8192)。

当帧到达的速度超过列表的接收能力时——约八分之一秒内超过 250 帧——列表会跳过其中最旧的。一个琥珀色标签随后会统计未显示的帧数,列表中的一行会标出它们缺失的位置。这些帧仍在捕获中,除非更新的帧在这之后把它们挤了出去:导出捕获即可看到它们。

一帧的详情 ​

点击某一行即可在右侧看到该帧。

字段内容
序号帧的编号。编号按捕获顺序递增,且从不重复使用。
时间捕获的时间。
方向已发送或已接收。
协议与列表中相同。
来源捕获它的工具(osc-send、osc-monitor、netsim、emulator、experiment-wait、…),以及它所属任务的编号(如果属于某个任务)。
本地本端地址(如果有)。对于中继的帧,是中继监听的地址。
对端对端。对于中继的帧,是它的去向:目标,或应答返回给的客户端。
大小其大小,以字节计。
判定与列表中相同。

解码 下是按协议读取的帧:OSC 数据包中的每条消息及其参数、HTTP 响应的标头和正文开头、模拟器的请求及其回复。

字节 下是十六进制转储:偏移量、16 个十六进制字节,以及相同字节的文本形式。列表携带每帧的前 1 KiB;当帧更长时,转储下方的一个按钮会加载全部内容。

一帧保留什么 ​

限制值达到限制时
一帧保留的字节256 KiB更长的帧保留其前 256 KiB,并说明它保留了总量的多少。
捕获中的帧8192最旧的帧让出空间。
捕获总共保留的字节64 MiB最旧的帧让出空间。

有些帧不保留字节:HTTP 交换(会记录其大小,响应标头和正文开头则在解码文本中)以及扫描器发现的开放端口。

MQTT 帧保留消息的载荷,而不是其外围的协议数据包;主题、QoS 和保留标志在其摘要中。

机密 ​

当一次实验运行或 立即发送 使用机密时,它们的值会在每一帧被捕获之前被遮蔽:摘要、解码文本、地址和判定中为 ••••,载荷中的每个字节为 *,因此转储中的偏移量保持正确。HTTP 界面的凭据也从不出现:HTTP 帧保存的是响应,而不是已发送的 Authorization 标头。

把一帧保存为信号 ​

要保留您捕获的一个数据包并在以后再次发送它——当发送它的设备已不在了:

  1. 选择该帧。
  2. 按 保存为信号。

该信号会进入信号库的 已捕获 文件夹,带有该帧的每一个字节,取自捕获所保留的内容,而不是解码文本。它以该帧的摘要命名,其备注说明它来自哪一帧。

得到的内容取决于该帧:

帧信号
一个 OSC 或 UDP 数据报一个带有该帧字节的原始 UDP 信号,十六进制。
一次 MQTT 发布——发送的、接收的,或模拟器的一个 MQTT 信号,带有该帧的代理、主题、QoS 和保留标志,其载荷按原样作为文本。空载荷会被保留,因此清除保留值也可以保存。
其他任何内容:TCP 流(包括中继承载的,或 TCP 节点的)、一次 HTTP 交换、一条 WebSocket 消息、一个不是发布的 MQTT 数据包(客户端在模拟器处的订阅)什么都没有:按钮不可用,其提示会说明原因。一个信号发送一个数据报或一次发布;这些内容无法按原样再次发送。

数据报会发送到:

  • 已接收的帧——接收它的地址(本地 一侧),因此该信号代替发送方;
  • 已发送的帧——它被发送到的对端;
  • 中继的帧,无论哪个方向——它的去向:从客户端发出的帧发往目标,应答则发往客户端。

当该地址是本机的所有地址时——例如监听 0.0.0.0:9000 或 [::]:9000 的监视器——信号会改为指向本机:127.0.0.1:9000 或 [::1]:9000。如果您指的是另一个地址,请打开该信号并更改其目标。

MQTT 信号会发往帧中所述的那个代理。监听所有地址的代理同样通过 127.0.0.1 访问。

按钮在以下情况下也不可用:

  • 未被完整保留的帧:大于 256 KiB 的帧,或没有保留任何字节的帧;
  • 载荷不是文本的 MQTT 消息——信号的载荷是文本,因此其字节无法按原样再次发送;
  • 未标明本端套接字的已接收帧,因此没有可发送到的地址。

捕获已经释放的帧也无法保存;控制台会说明这一点。当库文件无法读取时,保存为信号 也不可用,提示会显示文件的错误(见信号)。

导出 ​

导出 .jsonl 和 导出 .txt 会把整个捕获——最多 8192 帧,每帧保留的每一个字节,无论筛选器显示什么——写入数据文件夹中的文件 capture-<time>.jsonl 或 capture-<time>.txt(见文件)。控制台会说明位置。在连接到服务器的浏览器中,文件写在服务器上,由您的浏览器下载。

空的捕获不会被写入;控制台会说明没有可保存的内容。

  • .jsonl——每行一个 JSON 对象,每帧一行:seq、ts(自 1970 年起的毫秒数)、proto、dir、source、job_id、local、remote、bytes、kept、summary、detail、hex(前 1 KiB 的转储)、verdict,以及 data,即它保留的字节以 base64 表示。
  • .txt——供阅读:每个帧一行,包含其编号、时间、方向、协议、对端、大小和判定,然后是它的摘要、解码文本以及它保留的每个字节的十六进制转储。
json
{"seq":12,"ts":1767225600123,"proto":"osc","dir":"rx","source":"osc-monitor","job_id":3,"local":"0.0.0.0:9000","remote":"127.0.0.1:53211","bytes":20,"summary":"/fader/1 0.75","detail":"/fader/1 0.75","hex":"0000  2f 66 61 64 65 72 2f 31  00 00 00 00 2c 66 00 00  |/fader/1....,f..|\n0010  3f 40 00 00                                       |?@..|\n","verdict":null,"kept":20,"data":"L2ZhZGVyLzEAAAAALGYAAD9AAAA="}

来自别处 ​

其他界面会指向帧:实验时间线中的等待节点会链接到它匹配到的帧,模拟器的接收列表在每个交互上都有一个 ⌕ 按钮(在检查器中打开)。跟随其中之一会打开检查器,选中该帧,清除筛选器并恢复视图。