2016-10-09 5 views

ответ

2

Эти числа («1:» и «2:») являются порядковыми значениями параметров. Ординал - это причудливый способ сказать «положение в серии», однако цифры не обязательно должны быть последовательными, только уникальными.

[TLDR]

В Apache сберегательной IDL, порядковые присваиваются каждый параметр в списке параметров и каждое поле в структурах. Когда клиентские программы вызывают сервер Apache Thrift, они не передают имя параметра, они пропускают гораздо меньший порядковый номер, число, представляющее тип параметра и сериализованное значение параметра.

Это не только экономит место на проводе, но и позволяет добавлять параметры в функцию с течением времени и отправлять параметры в любом порядке без нарушения работы клиентов или серверов. Если программа Apache Thrift получает параметр с порядковым номером, он не распознает его, игнорирует его.

Также, если параметр отсутствует, можно использовать значение по умолчанию. Вот еще один пример служба со значением по умолчанию, назначенное для параметра allowPartialMatch:

service SocialLookup { 
    string GetSiteByRank(1: i32 rank) 
    i32 GetSiteRankByName(1: string name, 2: bool allowPartialMatch=false) 
    list<string> GetSitesByUsers(1: i32 minUserCount, 2: i32 maxUserCount) 
} 

Если клиент вызывает метод GetSiteRankByName и не проходит пары «2:», используются по умолчанию. Предоставление интерфейсов таким образом развивается так важно в средах, где вы хотите выпускать новые версии отдельных служб без необходимости одновременного обновления всех пользователей службы, например. микросервисы и CI/CD.

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

[/ TLDR]

1

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

+1

отличная вещь! вся цель ординалов состоит в том, чтобы устранить необходимость сериализации больших названий полей, что очень важно (на самом деле критическое). – codeSF

 Смежные вопросы

  • Нет связанных вопросов^_^