Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Запросы и ответы клиент-сервер

В этом разделе описаны клиентские запросы, их аргументы и значения, возвращаемые сервером.

Некоторые запросы описаны на отдельных страницах. Это запросы, связанные с:

Обзор

Имя

Код

Описание

IPROTO_OK

0x00
MP_UINT

Успешный ответ

IPROTO_CHUNK

0x80
MP_UINT

Внеполосный ответ

IPROTO_TYPE_ERROR

0x8XXX
MP_INT

Ответ с ошибкой

IPROTO_UNKNOWN

-1
MP_UINT

Неизвестный тип запроса

IPROTO_SELECT

0x01

Запрос Select

IPROTO_INSERT

0x02

Запрос Insert

IPROTO_REPLACE

0x03

Запрос Replace

IPROTO_UPDATE

0x04

Запрос Update

IPROTO_UPSERT

0x09

Запрос Upsert

IPROTO_DELETE

0x05

Запрос Delete

IPROTO_CALL

0x0a

Удалённый вызов функции (conn:call())

IPROTO_AUTH

0x07

Запрос аутентификации

IPROTO_EVAL

0x08

Вычисление Lua-выражения (conn:eval())

IPROTO_NOP

0x0c

Увеличивает LSN и больше ничего не делает

IPROTO_INSERT_ARROW

0x11

Запрос данных Iproto Insert Arrow. Доступно начиная с версии 3.3.0.

IPROTO_PING

0x40

Ping (conn:ping())

IPROTO_ID

0x49

Передача версии iproto и поддерживаемых возможностей

IPROTO_OK

Код: 0x00.

Этот тип запроса/ответа содержится в заголовке и означает успешное выполнение. Пример:

SVG diagram

IPROTO_CHUNK

Код: 0x80.

Если ответ является внеполосным из-за использования box.session.push(), то IPROTO_REQUEST_TYPE принимает значение IPROTO_CHUNK вместо IPROTO_OK.

IPROTO_TYPE_ERROR

Код: 0x8XXX (см. ниже).

Вместо IPROTO_OK заголовок ответа с ошибкой содержит 0x8XXX в IPROTO_REQUEST_TYPE. XXX – код ошибки, значение из src/box/errcode.h. В src/box/errcode.h также определены вспомогательные макросы, задающие шестнадцатеричные константы для кодов возврата.

Подробнее об ответах с ошибками см. в разделе Формат запросов и ответов.

IPROTO_UNKNOWN

Начиная с версии 2.11.0.

Код: -1.

Неизвестный тип запроса. Константа используется для переопределения обработчика неизвестных типов IPROTO-запросов. Подробнее: box.iproto.override() и box_iproto_override.

IPROTO_SELECT

Код: 0x01.

См. space_object:select(). Тело представляет собой карту из 6 элементов.

SVG diagram

Пример

Если ID tspace равен 512 и это пятое сообщение, {conn}.``space.tspace:select({0},{iterator='GT',offset=1,limit=2}) приведёт к следующему пакету запроса:

SVG diagram

В примерах можно найти фактические байтовые коды сообщения IPROTO_SELECT.

IPROTO_INSERT

Код: 0x02.

См. space_object:insert(). Тело представляет собой карту из 2 элементов:

SVG diagram

Например, если запрос – INSERT INTO {table-name} VALUES (1), (2), (3), то тело ответа содержит карту IPROTO_SQL_INFO с SQL_INFO_ROW_COUNT = 3. SQL_INFO_ROW_COUNT может быть равно 0 для операторов, не изменяющих строки, но может быть равно 1 для операторов, создающих новые объекты.

Пример

Если ID tspace равен 512 и это пятое сообщение, {conn}.``space.tspace:insert{1, 'AAA'} приведёт к следующим пакетам запроса и ответа:

SVG diagram

В руководстве Понимание бинарного протокола показаны фактические байтовые коды ответа на сообщение IPROTO_INSERT.

IPROTO_REPLACE

Код: 0x03.

См. space_object:replace(). Тело представляет собой карту из 2 элементов, как и для IPROTO_INSERT:

SVG diagram

IPROTO_UPDATE

Код: 0x04.

См. space_object:update().

Тело обычно представляет собой карту из 4 элементов:

SVG diagram

Примеры

Если операция не задаёт значений, то IPROTO_TUPLE представляет собой массив из 2 элементов:

SVG diagram

Обычно номера полей начинаются с 1.

Если операция задаёт одно значение, то IPROTO_TUPLE представляет собой массив из 3 элементов:

SVG diagram

В остальных случаях IPROTO_TUPLE представляет собой массив из 5 элементов:

SVG diagram

Если ID tspace равен 512 и это пятое сообщение, {conn}.``space.tspace:update(999, {{'=', 2, 'B'}}) приведёт к следующему пакету запроса:

SVG diagram

Элемент карты IPROTO_INDEX_BASE является необязательным.

В руководстве Понимание бинарного протокола показаны фактические байтовые коды сообщения IPROTO_UPDATE.

IPROTO_UPSERT

Код: 0x09.

См. space_object:upsert().

Тело обычно представляет собой карту из 4 элементов:

SVG diagram

IPROTO_OPS – массив операций. Он аналогичен IPROTO_TUPLE для IPROTO_UPDATE.

IPROTO_TUPLE – массив значений полей первичного ключа.

IPROTO_DELETE

Код: 0x05.

См. space_object:delete(). Тело представляет собой карту из 3 элементов:

SVG diagram

IPROTO_EVAL

Код: 0x08.

См. conn:eval(). Поскольку аргументом является Lua-выражение, таким образом Tarantool обрабатывает небинарные запросы через бинарный протокол. Любой запрос, не имеющий собственного кода, например box.space.{space-name}:drop(), будет обработан либо через IPROTO_CALL, либо через IPROTO_EVAL.

Административная утилита tt активно использует eval.

Тело представляет собой карту из 2 элементов:

SVG diagram
  • Для IPROTO_EVAL и IPROTO_CALL тело ответа обычно представляет собой массив, но поскольку Lua-запросы могут возвращать самые разные структуры, тела ответов также могут иметь самые разные структуры.

Пример

Если это пятое сообщение, conn:eval('return 5;') приведёт к:

SVG diagram

IPROTO_CALL

Код: 0x0a.

См. conn:call(). Это удалённый вызов хранимой процедуры. В /release/1.6 и более ранних версиях использовался запрос IPROTO_CALL_16 (код: 0x06). Сейчас он устарел и заменён на IPROTO_CALL.

Тело представляет собой карту из 2 элементов. Ответ будет списком значений, аналогичным ответу IPROTO_EVAL. Возвращаемое значение conn:call – это то, что возвращает функция.

SVG diagram

IPROTO_AUTH

Код: 0x07.

Общие сведения см. в разделе Пользователи руководства администратора.

Подробнее о том, как аутентификация работает в бинарном протоколе, см. в разделе Аутентификация этого документа.

Клиент отправляет пакет аутентификации как сообщение IPROTO_AUTH:

SVG diagram

IPROTO_USERNAME содержит имя пользователя. IPROTO_TUPLE должен быть массивом из 2 полей: механизм аутентификации и шифр (scramble), зашифрованный в соответствии с указанным механизмом.

Экземпляр сервера отвечает на пакет аутентификации стандартным ответом с 0 кортежей.

То, как Tarantool это обрабатывает, см. в net_box.c, функция netbox_encode_auth.

IPROTO_NOP

Код: 0x0c.

Не существует Lua-запроса, полностью эквивалентного IPROTO_NOP. Он приводит к увеличению LSN. Может использоваться для обновлений, в которых старые и новые значения совпадают, но LSN необходимо увеличить, так как изменение данных должно быть зафиксировано. Тело: отсутствует.

IPROTO_INSERT_ARROW

Начиная с версии 3.3.0.

Код: 0x11 Тело представляет собой карту из 2 элементов:

SVG diagram

IPROTO_PING

Код: 0x40.

См. conn:ping(). Тело будет пустой картой, так как IPROTO_PING в заголовке содержит всю информацию, необходимую экземпляру сервера.

SVG diagram

IPROTO_ID

Код: 0x49.

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

Тело представляет собой карту из 2 элементов:

SVG diagram

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

Запросы IPROTO_ID могут обрабатываться без аутентификации.