Кэширование формата

В любой инсталляции множество таблиц данных передаются между серверами SberMobile, клиентами и агентами. Каждая таблица имеет описание формата, которое может включать значительное количество данных, таких как подробные описания (тексты подсказки) полей, строковые и табличные значения по умолчанию, валидаторы и их сообщения об ошибках, и пр. Чаще всего, если таблица из 1-10 строк кодируется в строку для передачи по сети, ее формат занимает больше места, чем сами данные.

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

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

Кэширование формата работает по следующим правилам:

  • Когда таблица данных с определенным форматом впервые кодируется для передачи по сети, ее формат сохраняется в центральном кэше формата SberMobile Server, реализованном экземпляром объекта FormatCache и доступном через статический  метод Server.getFormatCache(). Формат получает уникальный ID сразу после кэширования.
  • Если таблица с упомянутым ID впервые отправляется через соединение по SberMobile протоколу, отправляется и сам формат, и его ID. Клиент подключения сохраняет формат и его ID в локальном кэше соединения, доступном через AbstractAggreGateDeviceController.getFormatCache().
  • При повторной отправке таблицы с таким же форматом через это же соединение, кодируется и отправляется только ID формата (сам формат не отправляется). Клиент соединения берет формат таблицы из своего локального кэша сразу при получении такой таблицы.