Версия:

Модуль buffer

Модуль buffer

Модуль buffer возвращает буфер, допускающий динамическое изменение размера, который используется только в качестве опции для методов модуля net.box.

Как правило, модуль net.box возвращает Lua-таблицу. Если используется опция buffer, то методы модуля net.box возвращают неформатированную строку MsgPack. Это экономит время работы на сервере, если в клиентском приложении есть собственная процедура декодирования MsgPack-строк.

buffer.ibuf()
возвращается:дескриптор буфера.
тип возвращаемого значения:
 cdata.

Пример:

Предположим, что Tarantool-сервер настроен на прослушивание на farhost:3301. Предположим, что на нем есть спейс T с одним кортежем: 'ABCDE', 12345. В данном примере запустим сервер на localhost:3302, а затем используем процедуры net.box для подключения к farhost. Затем создадим буфер и используем его как опцию для вызова conn.space...select(). Результат получим в формате MsgPack. Чтобы показать это, используем msgpack.decode_unchecked() на ibuf.rpos («позиция для чтения» в буфере). Таким образом, мы проведем декодирование не на удаленном сервере, а на локальном.

box.cfg{listen=3302}
  buffer = require('buffer')
  ibuf = buffer.ibuf()
  net_box = require('net.box')
  conn = net_box.connect('farhost:3301')
  buffer = require('buffer')
  conn.space.T:select({},{buffer=ibuf})
  msgpack = require('msgpack')
  msgpack.decode_unchecked(ibuf.rpos)

Результат последнего запроса выглядит следующим образом:

tarantool> msgpack.decode_unchecked(ibuf.rpos)
  ---
  - {48: [['ABCDE', 12345]]}
  - 'cdata<char *>: 0x7f97ba10c041'
  ...

Примечание

До версии 1.7.7 Tarantool’а в данном случае следует использовать функцию msgpack.ibuf_decode(ibuf.rpos). Начиная с версии 1.7.7 Tarantool’а , ibuf_decode объявлена устаревшей.