Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 8 февраля 2021 года; проверки требуют 7 правок.
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 8 февраля 2021 года; проверки требуют 7 правок.
Thrift включает в себя готовый программный конвейер, состоящий из шести уровней, для работы с клиентской и серверной частью. Верхний уровень составляет сгенерированный код описания Thrift. Службы генерируют из него клиентский и серверный код. В отличие от встроенных типов, созданная структура данных возвращается как результат в сгенерированном коде. Уровни протокола и транспортировки являются частью runtime-библиотеки. В Thrift возможно выбрать службы и изменить протокол и транспортировку без перекомпиляции кода. Помимо клиентской части Thrift включает в себя серверную инфраструктуру для связи протокола и транспортировки в blocking, non-blocking и multi-threaded серверах. Основа уровня Ввода/Вывода по-разному реализована для различных языков.
TFileTransport — Этот транспортировщик записывает в файл.
TFramedTransport — Этот транспортировщик используется, когда применяются non-blocking сервера. Он отправляет данные во фреймах, где каждому фрейму предшествует длина информации.
TMemoryTransport — Использование памяти для ввода / вывода. Реализация Java использует простой встроенный ByteArrayOutputStream.
TSocket — Использует blocking socket ввода / вывода для транспортировки.
TZlibTransport — Выполняет сжатие с помощью zlib. Используется в сочетании с другим транспортом. Отсутствует в реализации Java.
TNonblockingServer — multi-threaded сервер, использующий non-blocking ввод / вывод (Java реализация использует NIO channels). На этих серверах должен использоваться TFramedTransport.
Кросс-языковая сериализация с более низкими накладными расходами, в отличие от таких альтернатив как SOAP, за счет использования двоичного формата.
Простая и чистая библиотека. Не нуждается во фреймворке для кода. Не использует XML-конфигурацию.
Языковые привязки ощущаются естественными. Например, Java использует ArrayList<String>. C++ использует std::vector<std::string>.
Формат связи уровня приложений и формат связи уровня сериализации строго разделены. Они могут быть изменены независимо друг от друга.
Встроенные типы сериализации включают в себя: двоичный, дружественный к HTTP и компактный двоичный.
Складывается, как кросс-языковой сериализованный файл.
Мягкие версии протокола. Thrift не требует централизованный и явный механизм, как major-version/minor-version. Слабосвязанные группы могут свободно переходить в RPC вызовы.
Независим от архитектуры или от нестандартного ПО. Нет несовместимых лицензий на ПО.
Thrift написан на C++, однако код может быть написан на нескольких языках. Для создания Thrift службы для начала надо написать Thrift файлы, которые описывают его, затем сгенерировать код на выходном языке и указать команды запуска сервера, вызвав после чего их в клиенте. Вот пример файла описания: