Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Виктор Грищенко (JetBrains), Свой протокол и кр...

CodeFest
January 31, 2018

Виктор Грищенко (JetBrains), Свой протокол и кросс-платформенные парсеры за 30 минут, CodeFest 2017

https://2017.codefest.ru/lecture/1222

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

Обычный ответ - JSON, но JSON дорого парсить и он не даёт решительно никаких гарантий относительно структуры получившегося документа - образовавшееся дерево объектов придётся парсить по второму разу. Типизированные бинарные парсеры (protobuf и др) недостаточно кросс-платформенны.

Я расскажу про простое, но очень эффективное решение на основе регулярных языков. Как оказалось, регулярные выражения можно использовать промышленно (если не писать их руками). Учитывая повсеместную поддержку PCRE и их хорошую производительность (миллионы записей в секунду), новый текстовый протокол с верификацией структуры сообщений и парсерами под все платформы можно создать за полчаса.

CodeFest

January 31, 2018
Tweet

More Decks by CodeFest

Other Decks in Technology

Transcript

  1. Свой протокол и кросс- платформенные парсеры за 30 минут Когда

    JSON уже не подходит Виктор Грищенко Синьор помидор realm.io
  2. Байтики message Person { required string user_name = 1; optional

    int64 favourite_number = 2; repeated string interests = 3; }
  3. Грамматики const INVENTORY_JSON = new Grammar({ FLOAT: /\d{1,16}(\.\d{1,15})?/, INT: /\d{1,16}/,

    STRING: /"(\\.|[^"])*"/, IDKV: '"\\"id\\"" :STRING', NAMEKV: '"\\"name\\"" :STRING', QUANTKV:'"\\"quantity\\"" :INT', PRICEKV:'"\\"price\\"" :FLOAT', ENTRY: '{ IDKV ,NAMEKV? ,QUANTKV? ,PRICEKV? }', LIST: '[ ENTRY ,ENTRY* ]' }); {"id":"A345", "name":"teddy bear", "price": 5.45} ,ENTRY*