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 orientationgdzie 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())