| Apache Thrift | |
|---|---|
| | |
| Тип | RPC framework |
| Разработчик | Apache Software Foundation |
| Написана на | C++ |
| Операционная система | Кроссплатформенное программное обеспечение |
| Первый выпуск | 2007 |
| Последняя версия | 0.11.0 (07.12.2017) |
| Лицензия | Apache License 2.0 |
| Сайт | thrift.apache.org |
Thrift (с англ. — «бережливость», произносится как [θrift]) — язык описания интерфейсов, который используется для определения и создания служб под разные языки программирования. Является фреймворком к удалённому вызову процедур (RPC). Используется компанией Facebook в качестве масштабируемого кросс-языкового сервиса по разработке. Сочетает в себе программный конвейер с движком генерации кода для разработки служб, в той или иной степени эффективно и легко работающих между такими языками как C#, C++, Cappuccino, Cocoa, Delphi, Erlang, Go, Haskell, Java, OCaml, Perl, PHP, Python, Ruby, Smalltalk и JavaScript[1]. Проще говоря, 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++, Java, JavaScript, Python, PHP, XSD, Ruby, C#, Perl, Objective C, Erlang, Smalltalk, OCaml, and Haskell | C++, Java, Python (Perl, Ruby и C# обсуждаются) |
| Исходящие форматы | 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.
В этой статье не хватает ссылок на источники информации. |
Для улучшения этой статьи желательно: |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .