McDonnell Douglas AH-64 Apache
- 1 year ago
- 0
- 0
Thrift (с англ. — «бережливость», произносится как [θrift] ) — язык описания интерфейсов , который используется для определения и создания служб под разные языки программирования. Является фреймворком к удалённому вызову процедур (RPC). Используется компанией Facebook в качестве масштабируемого кросс-языкового сервиса по разработке. Сочетает в себе программный конвейер с движком генерации кода для разработки служб, в той или иной степени эффективно и легко работающих между такими языками как C# , C++ , Cappuccino , Cocoa , Delphi , Erlang , Go , Haskell , Java , OCaml , Perl , PHP , Python , Ruby , Rust , Smalltalk и JavaScript . Проще говоря, Thrift является двоичным протоколом связи. С апреля 2007 разрабатывается как open source проект некоммерческой организации Apache Software Foundation .
Thrift включает в себя готовый программный конвейер, состоящий из шести уровней, для работы с клиентской и серверной частью. Верхний уровень составляет сгенерированный код описания Thrift. Службы генерируют из него клиентский и серверный код. В отличие от встроенных типов, созданная структура данных возвращается как результат в сгенерированном коде. Уровни протокола и транспортировки являются частью
runtime-библиотеки
. В Thrift возможно выбрать службы и изменить протокол и транспортировку без
перекомпиляции
кода. Помимо клиентской части Thrift включает в себя серверную инфраструктуру для связи протокола и транспортировки в
blocking
,
non-blocking
и
multi-threaded
серверах. Основа уровня Ввода/Вывода по-разному реализована для различных языков.
ByteArrayOutputStream
.
zlib
. Используется в сочетании с другим транспортом. Отсутствует в реализации Java.
multi-threaded
сервер, использующий
non-blocking
ввод / вывод (Java реализация использует
NIO channels
). На этих серверах должен использоваться
TFramedTransport
.
single-threaded
, использующий
std blocking
ввод / вывод. Полезен для тестирования.
multi-threaded
сервер, использующий
std blocking
ввод / вывод.
ArrayList<String>
. C++ использует
std::vector<std::string>.
Apache Thrift | Protocol Buffers | |
---|---|---|
Разработчик | Facebook, Apache | |
Поддерживаемые языки |
C++, C#, Dart, D, Go, Haskell, Java, JavaScript, Python, PHP, XSD, Ruby, Perl, Objective C,
Erlang, Ruby, Smalltalk, OCaml, Haskell |
C++, C#, Dart, Go, Java, JavaScript, Python, PHP, Objective C, Ruby |
Исходящие форматы | Binary, JSON | Binary |
Простые типы |
bool
byte 16/32/64-bit integers double string byte sequence map<t1,t2> list<t> set<t> |
bool
32/64-bit integers float double string byte sequence повторные свойства работают как списки |
Константы | Да | Нет |
Составной тип | struct | message |
Исключения | Да | Нет |
Документация | Проблематично | Хорошая |
Лицензия | Apache | BSD-style |
Расширения составных типов | Нет | Да |
Thrift написан на C++, однако код может быть написан на нескольких языках. Для создания Thrift службы для начала надо написать Thrift файлы, которые описывают его, затем сгенерировать код на выходном языке и указать команды запуска сервера, вызвав после чего их в клиенте. Вот пример файла описания:
enum PhoneType { HOME, WORK, MOBILE, OTHER } struct Phone { 1: i32 id, 2: string number, 3: PhoneType type }
Thrift сгенерирует код из этого файла описания, например, в Java.
PhoneType
будет простым перечислением
(enum)
внутри
POJO
для класса Phone.