Использовать двоичный термин 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? Кто-нибудь использует это?

Другие вопросы по тегам