BUS/RT - Rust-native IPC broker
## What is BUS/RT
BUS/RT® is a Rust-native IPC broker, written in Rust/Tokio, inspired by
[NATS](https://nats.io), [ZeroMQ](https://zeromq.org) and
[Nanomsg](https://nanomsg.org). BUS/RT is fast, flexible and very easy to use,
optimized for both high-load and ultra-low latency real-time scenarios.
The library can be embedded in any Rust project or be used as a standalone
server.
BUS/RT is the core bus of [EVA ICS v4](https://www.eva-ics.com/).
## Inter-process communication
The following communication patterns are supported out-of-the-box:
* one-to-one messages
* one-to-many messages
* pub/sub
The following channels are supported:
* async channels between threads/futures (Rust only)
* UNIX sockets (local machine, Linux/BSD)
* TCP sockets (Linux/BSD/Windows)
In addition to Rust, BUS/RT has also bindings for the following languages:
* Python (sync):
* Python (async):
* JavaScript (Node.js):
* Dart
Rust crate:
## Real-time safety
Use `rt` feature to use for internal mutexes
[`parking_lot_rt`](https://crates.io/crates/parking_lot_rt) - a `parking_lot`
fork without spin-locks, which is real-time safe.
## Technical documentation
The full documentation is available at:
## Some numbers
### Benchmarks
CPU: i7-7700HQ
Broker: 4 workers, clients: 8, payload size: 100 bytes, local IPC (single unix
socket), totals:
| stage | iters/s |
|--------------------------|-------------|
| rpc.call | 126\_824 |
| rpc.call+handle | 64\_694 |
| rpc.call0 | 178\_505 |
| send+recv.qos.no | 1\_667\_131 |
| send+recv.qos.processed | 147\_812 |
| send.qos.no | 2\_748\_870 |
| send.qos.processed | 183\_795 |
## About the authors
[Bohemia Automation](https://www.bohemia-automation.com) /
[Altertech](https://www.altertech.com) is a group of companies with 15+ years
of experience in the enterprise automation and industrial IoT. Our setups
include power plants, factories and urban infrastructure. Largest of them have
1M+ sensors and controlled devices and the bar raises higher and higher every
day.