Протокол — клиент ↔ сервер
Полная спецификация каждого байта, передаваемого на клиентском порту (по умолчанию 5225). Она состоит из аутентификационного хендшейка, выполняемого один раз сразу после подключения, за которым следует бинарный протокол блокировок на основе кадров. Каждый официальный клиент реализует эту спецификацию идентично, байт в байт.
На каждой странице сообщения раздел «Структура» показывает расположение полей, а «Пример» — фактически передаваемые байты (значения меняются по refresh).
Обозначение байтов:
opпоказан как символ ASCII (например,A);waitиlease— бинарные значения u8, аtokenиowner— бинарные значения u64 big-endian. Они показаны в hex (например,wait=5→05).keyиaddr— текст в UTF-8, аreason— текст ASCII; все они имеют переменную длину, обозначаемую в структуре какN. Завершающий\n(перевод строки) заканчивает кадр как0A. Поля передаются подряд без разделителей.Фиксированные заголовки (
wait,lease,token,owner) — бинарные значения и могут содержать0x0A, поэтому парсер обязан сначала вычитать фиксированный заголовок по количеству байт для данного op, и только затем искать перевод строки. Длины: запросыA= 10 Б /R= 8 Б, ответыA= 16 Б /T·B·R·N= 8 Б /M·L·E= 0 Б.
Содержание
- Транспортный уровень
- Аутентификационный хендшейк — общий с Raft-портом кластера, поэтому находится на странице Протокол (общий)
- Запросы
- Ответы
- Ограничения полей
- Матрица запрос × состояние ключа
- Fencing-токен
- Правила сопоставления ответов
- Пример сессии
Протокол консенсуса кластера (Raft) между серверами описан на отдельной странице.