A · 已获取 (Acquired)
结构refresh
对获取请求(A)的成功响应。token 是 围栏令牌(u64,大端序),每次授予 都会递增;owner 则是把请求中携带的值原样回传 —— 它是一个关联标识,用于 精确定位这是哪一次获取尝试的响应 (响应匹配规则)。
op 之后带有 16 字节定长头部。由于这 16 个字节是二进制数据,可能包含 0x0A(\n), 因此客户端必须先按字节数读取,然后再扫描换行符。
字节表示法:
op是 ASCII 字符,token、owner是二进制(u64,大端序),key是 UTF-8 文本(变长,在结构中以N表示)。末尾的\n为0A。
流程
客户端
服务器
A · 获取 (key · owner)
key 未被占用 → 立即发放
A · 已获取 (token = n · 回传 owner)
已被占用 → 在队列中等待持有者释放或过期
轮到自己 → A · 已获取 (token = n+1)
请求响应
获得授予有两条路径,但帧结构是一样的 —— 无论是立即发放还是等待后发放, 到达的 A 都携带着那一刻全新的围栏令牌, 且该 token 只会递增,不会减小。如果在等待期间超过了 wait,则会收到 超时 T而不是这个响应。