Communication layer

ZeroMQ Hubs, clients, properties and configuration.

Quatm’s services communicate over ZeroMQ. The design keeps the timing path independent of rendering, and makes local and remote clients interchangeable.

Hubs and streams

Each data type has a Hub that collects and redistributes messages:

  • scalar data streams;
  • image streams;
  • command channels;
  • property updates;
  • messages and logs.

Clients connect to the Hubs they need. A client process does not need to know which other clients exist, and a Hub failure is visible and restartable.

Client types

ClientPurpose
DataClientsubscribe to scalar data series
ImageClientsubscribe to camera images
CommandClientsend commands to a controller
MessageClientpublish and receive operational messages
Propertiessynchronise the distributed property tree

Properties

The property tree is the shared configuration and state model. Properties are read and written by name through a filesystem-like path; the Property Logger persists the tree and applies the persistence policy. GUI panels, web dashboards and experiment code all read the same values.

Remote property writes use a persistent publisher and explicit acknowledgement, so a remote action is not silently lost when a connection is slow.

Transport choices

  • IPC for processes on the same machine (lowest latency).
  • TCP for split control/analysis machines and remote clients.

Curve encryption is available for local and network channels. The transport layer also handles multipart framing, malformed-frame recovery and request timeouts.

Configuration

Endpoints, project root and service selection are read from the project’s configuration/ directory. A service can be launched by the Operations Console, by a project launcher, or directly as a Python module for debugging.


Clients

Data/Image/Command clients: publish/subscribe communication (TCP/IPC), with connection targets set by the central configuration.

Property tree

Distributed hierarchical property tree: the local copy is synchronized bidirectionally through the Property Hub and Propertylogger.

Data management

Multi-stream data aggregation: aligned to each experiment run, missing streams zero-filled on timeout, then written to HDF5.

Messaging

Standardized message stream client: sends timestamped, source-tagged messages to the Message Hub.

Configuration and property persistence

configreader + propertylogger: reading JSON configuration, persisting the property tree and monitoring active streams.

Peripheral service modules

Peripheral services such as InfluxDB, notification push, the image network server, the Web Hub and the XSUB/XPUB proxy.