All Projects → bschwind → mqtt-broker

bschwind / mqtt-broker

Licence: MIT license
A tokio-based MQTT v5 broker written in pure Rust [WIP]

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to mqtt-broker

Rumqttd
rust mqtt broker
Stars: ✭ 77 (-30%)
Mutual labels:  tokio, broker
Vernemq
A distributed MQTT message broker based on Erlang/OTP. Built for high quality & Industrial use cases.
Stars: ✭ 2,628 (+2289.09%)
Mutual labels:  pubsub, broker
Hivemq Community Edition
HiveMQ CE is a Java-based open source MQTT broker that fully supports MQTT 3.x and MQTT 5. It is the foundation of the HiveMQ Enterprise Connectivity and Messaging Platform
Stars: ✭ 562 (+410.91%)
Mutual labels:  pubsub, broker
Message Bus
Go simple async message bus
Stars: ✭ 166 (+50.91%)
Mutual labels:  pubsub, broker
smartacus-mqtt-broker
smartacus-mqtt-broker is a Java-based open source MQTT broker that fully supports MQTT 3.x .Using Netty 4.1.37
Stars: ✭ 25 (-77.27%)
Mutual labels:  pubsub, broker
Ejabberd
Robust, Ubiquitous and Massively Scalable Messaging Platform (XMPP, MQTT, SIP Server)
Stars: ✭ 5,077 (+4515.45%)
Mutual labels:  pubsub, broker
Emqx
An Open-Source, Cloud-Native, Distributed MQTT Message Broker for IoT.
Stars: ✭ 8,951 (+8037.27%)
Mutual labels:  pubsub, broker
Sobjectizer
An implementation of Actor, Publish-Subscribe, and CSP models in one rather small C++ framework. With performance, quality, and stability proved by years in the production.
Stars: ✭ 172 (+56.36%)
Mutual labels:  pubsub
Iceoryx
iceoryx - true zero-copy inter-process-communication
Stars: ✭ 208 (+89.09%)
Mutual labels:  pubsub
Uwebsockets
Simple, secure & standards compliant web server for the most demanding of applications
Stars: ✭ 13,412 (+12092.73%)
Mutual labels:  pubsub
Fpgo
Monad, Functional Programming features for Golang
Stars: ✭ 165 (+50%)
Mutual labels:  pubsub
Liftbridge
Lightweight, fault-tolerant message streams.
Stars: ✭ 2,175 (+1877.27%)
Mutual labels:  pubsub
Pulsar Client Go
Apache Pulsar Go Client Library
Stars: ✭ 251 (+128.18%)
Mutual labels:  pubsub
Twitch
Interact with Twitch's API, chat, PubSub and subscribe to WebHooks.
Stars: ✭ 237 (+115.45%)
Mutual labels:  pubsub
Cachingframework.redis
Distributed caching based on StackExchange.Redis and Redis. Includes support for tagging and is cluster-compatible.
Stars: ✭ 209 (+90%)
Mutual labels:  pubsub
Tigase Server
Highly optimized, extremely modular and very flexible XMPP/Jabber server
Stars: ✭ 170 (+54.55%)
Mutual labels:  pubsub
Wampy.js
Simple WAMP (WebSocket Application Messaging Protocol) Javascript implementation
Stars: ✭ 244 (+121.82%)
Mutual labels:  pubsub
Autobahn Python
WebSocket and WAMP in Python for Twisted and asyncio
Stars: ✭ 2,305 (+1995.45%)
Mutual labels:  pubsub
Autobahn Cpp
WAMP for C++ in Boost/Asio
Stars: ✭ 231 (+110%)
Mutual labels:  pubsub
Node Pg Pubsub
A Publish/Subscribe implementation on top of PostgreSQL NOTIFY/LISTEN
Stars: ✭ 194 (+76.36%)
Mutual labels:  pubsub

mqtt-broker

A tokio-based MQTT v5 broker written in Rust.

Project Goals

The goals for this project are fairly straightforward:

  • Adhere to the MQTT V5 Spec
  • Be easily deployable as a single binary
  • Have reasonable performance and memory usage on a single node

I originally started this project as a simple, open-source broker for any IoT products I might make. If I were to sell such products, I would want to allow users to run their own broker in case I can no longer run one, and it should be as easy as possible to do so.

Extra features like a broker cluster or extra transport layers are nice to have features, but won't be considered until the core V5 spec is implemented. The exception to this is the WebSocket transport, which is specifically mentioned in the spec and quite useful to have.

Comparison to Other Brokers

Wikipedia has a fairly comprehensive list of brokers to choose from.

rumqtt at the moment appears to be the most fully-featured broker. Take a look there first if you're looking for a more "ready-to-go" Rust broker.

PubSubRT is another interesting Rust-based broker. It's an alternative to MQTT, not an implementation of it.

NATS.rs seems really nice too, but I haven't looked further into it yet.

Spec Compliance

This broker is currently not compliant with the MQTT V5 spec. Visit the spec compliance milestone to see the current progress.

Dependencies

  • cargo
  • rustc (version 1.39 or later)

Build

$ cargo build --release

Run

$ cargo run --release

Testing

$ cargo test

Code Format

The formatting options currently use nightly-only options.

$ cargo +nightly fmt

Code Linting

$ cargo clippy

Code Fuzzing

Fuzzing requires a nightly toolchain. Fuzzing for this project is currently confirmed to work with:

rustc 1.42.0-nightly (6d3f4e0aa 2020-01-25)

Running

cargo install cargo-fuzz
cargo +nightly fuzz run decoder_fuzzer_v311
cargo +nightly fuzz run decoder_fuzzer_v500
cargo +nightly fuzz run topic_filter_fuzzer
cargo +nightly fuzz run topic_fuzzer
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].