ASN.1 - это стандарт ISO / ISE.Он имеет очень читаемый исходный язык и различные фоны, как бинарные, так и читабельные.Будучи международным стандартом (и в то же время старым!), Исходный язык немного кухонный (примерно так же, как Атлантический океан немного влажный), но он очень хорошо определен и имеет приличную поддержку,(Вероятно, вы можете найти библиотеку ASN.1 для любого языка, который вы называете, если вы достаточно усердно копаете, и если нет, то есть хорошие библиотеки языков C, которые вы можете использовать в FFI.) Это, будучи стандартизированным языком, одержимо документировано итакже есть несколько хороших учебных пособий.
Экономия не является стандартом.Он изначально из Facebook, позже был открыт с открытым исходным кодом и в настоящее время является проектом Apache высшего уровня.Это не очень хорошо документировано - особенно уровни обучения - и, на мой взгляд (по общему признанию, краткий), кажется, не добавляет ничего, что другие предыдущие усилия уже не делают (а в некоторых случаях лучше).Чтобы быть справедливым, у него есть довольно внушительное количество языков, которые он поддерживает из коробки, в том числе несколько высококлассных неосновных.IDL также имеет неопределенную C-образность.
Буферы протокола не является стандартом.Это продукт Google, который выпускается для более широкого сообщества.Он немного ограничен с точки зрения языков, поддерживаемых «из коробки» (он поддерживает только C ++, Python и Java), но имеет много сторонней поддержки для других языков (с очень изменчивым качеством).Google выполняет почти всю свою работу с использованием буферов протоколов, поэтому это проверенный в бою, закаленный в боях протокол (хотя и не такой закаленный в боях, как ASN.1. Он имеет гораздо лучшую документацию, чем Thrift, но, будучиПродукт Google, он, скорее всего, будет нестабильным (в смысле постоянно меняющегося, а не ненадежного). IDL также является C-подобным.
Все вышеперечисленные системы используют схему, определеннуюв некотором виде IDL для генерации кода для целевого языка, который затем используется при кодировании и декодировании. Avro нет. Типизация Avro является динамической, и ее данные схемы используются во время выполнения непосредственно как для кодирования, так и для декодирования (что имеет некоторые очевидные затраты вобработки, но также есть некоторые очевидные преимущества для динамических языков и отсутствие необходимости в типах тегов и т. д.) В его схеме используется JSON, что делает управление Avro на новом языке немного проще, если уже есть библиотека JSON.Опять же, как и в большинстве систем описания протоколов колесных изобретений, Avro также нестандартизированный.
Лично, несмотря на мои отношения любви / ненависти с ним, я бы, вероятно, использовал ASN.1 для большинства RPC и целей передачи сообщений, хотя на самом деле у него нет стека RPC (вы бы имеличтобы сделать один, но МОК сделать это достаточно просто).