Skip to content
/ crow Public

Система обмена сообщениями.

License

Notifications You must be signed in to change notification settings

mirmik/crow

Repository files navigation

Протокол датаграммной передачи crow.

Философия и концептуальное устройство.

Crow задуман как встраиваемая библиотека, реализующая надёжный протокол передачи поверх широкого класса каналов передачи информации и обеспечиающая гибкость в построении обработчиков такого типа запросов.

Базовыми сущностями библиотеки crow являются:

  • башня
  • врата
  • пакет
  • протокол обработки

Под башнями понимаются информационные процессы, обменивающиеся сообщениями в виде пакетов через драйверы каналов связи, именуемые вратами. По получению сообщения башня решает, что делать со входящей информацией исходя из заявленного типа протокола обработки.

Пакеты могут пересылаться как соседней башне непосредственно достижимой через имеющиеся у неё врата, так и по цепочке врат. Для управления движением пакета через различное количество врат различных типов, последний содержит поле адреса варьируемой длины. При прохождении через башню с адреса считывается индекс врат, через которые необходимо переслать пакет, а сами врата считывают адрес башни кодирующий способ достижения башни-адресата на управляемом вратами интерфейсе.

Качество обслуживания

Для надёжной доставки и гибкой настройки загрузки канала связи, протокол crow поддерживает 3 уровня подтверждения доставки пакетов.

QOS_0 - без подтверждение. Доставка производится не более одного раза. QOS_1 - одностороннее подтверждение. Доставка производится один или более раз. QOS_2 - двустороннее подтверждение. Доставка производится один раз.

Варианты с доставкой предполагают отправку обратного ack-пакета. Если отправитель не получает ack пакет, он через интервал времени, определяемый параметром ackquant повторяет отправку пакета. Для QOS 2 также выполняется подтверждение прихода ack-пакета через отправку пакета ack2. Таким образом в идеальном случае через канал связи пойдёт для QOS_1 x2 пакетов, а для QOS_2 x3.

Устройство пакета crow.

Базовая структура пакета crow выглядит следующим образом:

  • Заголовок
    • Поле флагов
    • Длина поле адресса
    • Полная длина пакета
    • Маршрутный курсор
    • Идентификатор пакета
    • Поле качества обслуживания
    • Квант времени обслуживания
  • Поле адреса
  • Поле данных

Врата (gateways)

Врата соединяют башни crow. Задача врат состоит в анализе адресной строки, выборе ноды получателя и отправке/получения сообщений через физическую среду. Врата регистрируются за определённым номером, который должен быть известен отправителю, чтобы башня могла перенаправить пакет через указанные врата.

Типы врат:

UDP

Базовый тип врат, перекидывающий пакеты через UDP сокеты. Стандартный номер для udp врат: 12.

Serial

Врата для работы с физически зашумлённым каналом внешнего мира, например com портом. Для защиты данных используют протокол igris/protocols/gstuff.h

Serial_v1

Старая версия последовательных версия врат, использующая первую версию протокола gstuff.

Подпротоколы

Брокер и Протокол pubsub.

Реализует доставку сообщений на основе брокера apps/crowker.

Протокол node.

Добавляет дополнительный слой нумерации - портов. Обработчик порта реализуется в виде объекта типа crow::node (crow/proto/node.h). Слой берёт на себя доставку сообщений. Логика обработки реализуется в подпротоколах.

(node) Подпротокол rpc - remote procedure call.

API для бинарного общения с удалёнными сервисами. Сервисы объявляют набор обработчиков, характеризуемых названием, параметрами и возвращаемым значением которым может обратиться удалённое устройство, используя один из двух протоколов. Отличие протоколов в известности типов аргументов и возвращаемого значения на стороне отправителя. Если типы указаны, аргументы передаются последовательной сериализацией igris::serialize и распаковываются процедурой igris::deserialize на обратной стороне. Если типы не указаны, аргументы передаются в в сериализованном объекте igris::trent, причём, высшим типом этого объекта должен юыть массив. На стороне получателя аргументы биндяться на параметры (см. процедуру __bind).

Подпротокол rpc использует стандартный nodeno : 2.

(node) Подпротокол cli (а также genos::clinode).

Реализует удалённый сервис через имитацию текстового cli со стандартными параметрами argv, argc. В качестве данных передаются строковые запросы и в текстовой же форме воращается ответ. Удобен для реализации удалённой консоли.

(node) Подпротокол channel.

Реализация каналов аля TCP. Включает объекты channel, acceptor.

(node) Подпротокол msgbox.

Реализация паттерна Send-Receive-Reply.

About

Система обмена сообщениями.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published