Skip to content

Latest commit

 

History

History
 
 

README.md

Publish-Subscribe

Caution

Every payload you transmit with iceoryx2 must be compatible with shared memory. Specifically, it must:

  • be self contained, no heap, no pointers to external sources
  • have a uniform memory representation, ensuring that shared structs have the same data layout
    • therefore, only ctypes and ctypes.Structure can be transferred
  • not use pointers to manage their internal structure

Any other python data type, except ctypes or ctypes.Structures, will likely cause undefined behavior and may result in segmentation faults.

Only fixed-size integers (like ctypes.c_uint8_t), ctypes.c_float, ctypes.c_double, and the types in the iceoryx2-bb-container library are cross-language compatible!

This example illustrates a robust publisher-subscriber communication pattern between two separate processes. The publisher sends a message every second, each containing [TransmissionData]. On the receiving end, the subscriber checks for new data every second.

The subscriber is printing the sample on the console whenever new data arrives.

How to Build

Before proceeding, a virtual environment with all dependencies needs to be created. You can find the detailed instructions in the Python Examples Readme.

poetry --project iceoryx2-ffi/python install

Then, the iceoryx2 python bindings can be built and installed into the virtual environment:

poetry --project iceoryx2-ffi/python run maturin develop --manifest-path iceoryx2-ffi/python/Cargo.toml --target-dir target/ff/python

How to Run

To observe this dynamic communication in action, open two separate terminals and execute the following commands:

Terminal 1

poetry --project iceoryx2-ffi/python run python examples/python/publish_subscribe/subscriber.py

Terminal 2

poetry --project iceoryx2-ffi/python run python examples/python/publish_subscribe/publisher.py

Feel free to run multiple instances of publisher or subscriber processes simultaneously to explore how iceoryx2 handles publisher-subscriber communication efficiently.

Tip

You may hit the maximum supported number of ports when too many publisher or subscriber processes run. Take a look at the iceoryx2 config to set the limits globally or at the API of the Service builder to set them for a single service.