Использовать двоичный термин erlang для отправки структурированных данных по сети?
Рассмотрим клиент-серверное приложение, в котором клиент и сервер используют TCP-соединение для обмена сообщениями. Сообщения могут быть разных типов: текстовые, видео, изображения и т. Д. Сообщения передаются в терминах Erlang.
например
client --> {{username, "Romeo"}, {password, "secret"}} --> server
client <-- {authresult, 'PASS'} <-- server
client --> {{toUser, "Juliet"}, {msg, {text, "hello!"}}} --> server
client --> {{toTopic, "ErlangCafe"}, {msg, {text, "i love gen_server}}} --> server
client --> {{toUser, "Francisco"}, {msg, {jpg, <<binary data>>}}} --> server
Причины, по которым я думаю об эрланговском термине для формата двоичных данных:
1) Google Protobuf и Apache Thrift усложняют код и увеличивают производительность на стороне сервера. 2) JSON кажется не очень хорошим для двоичных данных. 3) Термин Erlang () является простым и естественным с точки зрения сервера Erlang, и я думаю, что он приносит меньше накладных расходов. чем протобуф и бережливость
Сервер просто кодирует данные с помощью term_to_binary () перед отправкой и декодирует полученные данные с помощью binary_to_term (). Клиентская сторона использует библиотеку для кодирования данных в двоичный термин erlang перед отправкой и декодирования полученных данных.
Мои вопросы:
1) Хорошо ли использовать erlang term() в качестве двоичного формата данных в этом сценарии приложения? 2) Какие библиотеки использовать для кодирования / декодирования на мобильных клиентах (Android и iOS)?
1 ответ
1,2. Если бы он использовался только между приложениями erlang, все было бы в порядке. Но двоичный формат Эрланга не является широко принятым и используемым. Я бы выбрал протобаффы или бережливость.
Просто для справки вот описание двоичного формата http://erlang.org/doc/apps/erts/erl_ext_dist.html и вот пример того, как вы можете вручную кодировать структуру python в двоичный формат erlang (хотя и на русском).
Вот также некоторые другие варианты Erlang Universal Binary Format? Кто-нибудь использует это?