Skip to content
This repository was archived by the owner on Aug 12, 2025. It is now read-only.

Latest commit

 

History

History
56 lines (40 loc) · 7.13 KB

network-protocol.md

File metadata and controls

56 lines (40 loc) · 7.13 KB
title Сетевой протокол

Сетевой протокол

TaskFlux использует свой собственный сетевой протокол. Общие характеристики описаны здесь (настройки, структуры данных и т.д.) Этот протокол используется для общения как между узлами, так и между клиентом и сервером.

Настройки

Для общения используются сокеты. Работа идет поверх TCP протокола.

Обмен данными идет в Big-Endian формате.

Структуры данных

В этой секции описаны общие для всех сетевых протоколов структуры данных (типы). Каждый протокол может определить свои.

Базовые типы данных

Используемые в пакетах примитивные типы данных:

Название Длина Диапазон Описание
Byte 1 байт [0; 255] Беззнаковое, целое число
Int32 4 байта [-2147483648; 2147483647] Знаковое, целочисленное значение.
UInt32 4 байта [0; 4294967295] Беззнаковое, целочисленное значение.
Int64 8 байт [-9223372036854775808; 9223372036854775807] Целочисленное значение
Bool 1 байт [0; 1] Логический тип.
false - байт 0
true - байт 1.
На практике, любое значение отличное от нуля интерпретируется как true

Если после названия типа в скобках указано значение, то оно используется в качестве константы для этого поля. Например, Bool(0) означает, что в этом поле всегда будет присутствовать 0 - false, а Int32(100) - то, что в этом поле всегда находится число 100 (знаковое, 4-х байтное).

Производные (составные) типы данных

Поверх базовых типов построены составные, вспомогательные:

Название Базовый размер Описание Визуальное расположение
Array<T> 4 байта Обобщенный массив тип данных T фиксированного значения.
Количество элементов указывается в начале пакета типа через Int32. Далее следуют значения типа друг за другом без специальных маркеров
Int32 | T[]
String 4 байта Строковое значение.
Первые 4 байта указывают длину строки.
Дальше идет массив байтов указанной прежде длины.
Используется кодировка UTF-8, если не указано иное
Int32 | Array<Byte>
Buffer 4 байта Массив байт фиксированной длины. Длина указывается в первых 4 байтах (целочисленное значение). Int32 | Array<Byte>
Pair<T1, T2> - Пара из 2 значений типов T1 и T2. Значения следуют друг за другом без специальных маркеров разделителя или начала. T1 | T2
Dict<T1, T2> 4 байта Список из нескольких пар значений типов T1 и T2 (в T1 и T2 необходимо подставить реальный тип данных).
Значения типов следуют друг за другом.
Количество пар указывается в первых 4 байтах через Int32.
Array<Pair<T1, T2>>
QueueName 1 байт Название очереди. Первый байт указывает на длину, и дальше идет N байтов названия.
Используемая кодировка - ASCII
Byte | Byte[N]
Nullable<T> 1 байт Обертка над типом T, позволяющая указывать отсутствие значения.
Первым байтом идет Boolean: true - дальше идет значение T (его структура должна быть известна), false - дальше ничего не записано
Byte | T

Примечание: значения ключей в типе Dict могут повторяться

Символы внутри угловых скобок указывают на используемую внутри структуру данных. Например, Nullable\<Int32> указывает, что в этом поле может находиться null, либо Int32.