Komunikacja w sytemach rozproszonych – ZeroMQ
Zadanie (0-10 punktów)
Cel
Utwórz system, w którym dwie aplikacje komunikują się ze sobą z użyciem biblioteki ZeroMQ. Pierwsza aplikacja powinna wysyłać złożoną strukturę danych do drugiej aplikacji z wykorzystaniem serializacji. Druga aplikacja powinna deserializować dane i wyświetlać otrzymaną strukturę.
Uwagi
- Do serializacji/deserializacji struktury danych użyj biblioteki Google Protocol Buffers.
-
Struktura danych do wysłania (bazuje na ROS Pose).
Point position Quaternion orientation
gdzie Point zawiera współrzędne x, y, z i Quaternion zawiera elementy: x, y, z, w.
- ZeroMQ in C++:
#include <zmq.hpp>
, linker option:-lzmq
Example of protobuf usage in Python
-
Install protobuf compiler (if necessary)
apt install protobuf-compiler
-
Message schema definition (person_msg.proto file)
syntax = "proto3"; message Person { string name = 1; optional int32 id = 2; }
-
Generate code from schema
protoc -I=. --python_out=. ./person.proto
-
Serialize message and write it to the file
import person.person_pb2 as person_pb2 person_msg = person_pb2.Person() person_msg.name = "John" person_msg.id = 5 # Write message to binary file with open("person.bin", "wb") as f: data = person_msg.SerializeToString() f.write(data)
-
Read a message from file and deserialize it
import person.person_pb2 as person_pb2 # Read message from binary file with open("person.bin", "rb") as f: msg = person_pb2.Person().FromString(f.read())