Автостопом по Python.

Межъязыковая сериализация.

Если вы ищете модуль сериализации данных, который поддерживает несколько языков, подойдут Protobuf от Google (https://developers.google.com/protocol-buffers/docs/pythontutorial) и Avro от Apache (https://avro.apache.org/docs/1.7.6/gettingstartedpython.html).

В стандартной библиотеке имеется библиотека xdrlib (https://docs.python.org/3/library/xdrlib.html), позволяющая упаковывать и распаковывать данные в формате External Data Representation (XDR) (https://en.wikipedia.org/wiki/External_Data_Representation) от компании Sun. Этот формат не зависит от операционной системы и протокола передачи данных. Он работает на гораздо более низком уровне, нежели предыдущие варианты, и просто выполняет конкатенацию упакованных байтов, поэтому и клиент, и сервер должны знать тип и порядок упаковки. Рассмотрим пример сервера, получающего данные в формате XDR:

Автостопом по Python. Автостопом по Python.

Автостопом по Python.Данные могут иметь произвольную длину, поэтому мы добавили в начало файла упакованное беззнаковое число (4 байта), содержащее размер сообщения.

Автостопом по Python.Мы должны знать заранее, что получаем данные типа unsigned int.

Автостопом по Python.В этой строке считываем остальную часть сообщения…

Автостопом по Python.…а в этой сбрасываем распаковщик, чтобы он начал работать с новыми данными.

Автостопом по Python.Мы должны знать заранее, что получаем одну строку, а затем одно число с плавающей точкой.

Конечно, если обе стороны являлись программами Python, вы бы использовали Pickles. Но если сервер написан на каком-то другом языке, то соответствующий код клиента, отправляющего данные, выглядел бы так:

Автостопом по Python.

Автостопом по Python.Сначала упакуем все данные, подлежащие отправке.

Автостопом по Python.Далее отдельно упакуем длину сообщения…

Автостопом по Python.…и добавим ее ко всему сообщению.