Сейчас идёт тестирование: код на GitHub будет открыт после завершения.

R · Освобождено

Структураrefresh

Успешный ответ на запрос освобождения (R).

Обозначение байтов: op — символ ASCII, token — бинарный (u64, big-endian), key — текст в UTF-8 (переменной длины, N в структуре). Завершающий \n — это 0A. Фиксированный заголовок — бинарное значение и может содержать 0x0A, поэтому его нужно сначала вычитать по количеству байт, и лишь затем искать перевод строки.

token — это коррелятор: значение, отправленное в запросе и возвращённое без изменений. По нему клиент определяет, ответом на какой запрос является этот кадр (Правила сопоставления ответов).

Поток

Владелец X
Сервер
Ожидающий Y
R · release (key · token)
R · released
если есть ожидающий
A · acquired (новый token)
запросответ

R (released) приходит только освободившей стороне. Если был ожидающий, отдельно от этого, на соединение первого в очереди приходит Захвачено A — передача происходит напрямую, без повторной конкуренции, а поскольку оба ответа идут по разным соединениям, гарантия порядка между ними не нужна.