Skip to content

Husky22/mini-mqtt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mini-Mqtt

After doing the HTTP-Server Codecrafters challenge I wanted to try to create my own MQTT-Broker in Rust. As I didn't want to spend too much time to implement the full MQTT-Spec I limited myself to a broadcasting server with topic subscription functionality.

This was a nice exercise in using Tokio, especially its Message-Passing mechanisms and develop a custom codec using Deku

Benchmarking

After replacing std::HashMap with FxHashMap and replacing the topics Mutex with a RWLock I could 10x the performance to 140000 msg/s. The major improvement came by using RWLock though.

On my 2019 MBP i9-Version with 8-cores I got at first 12000 Messages/s with a message size of 15 Bytes. After replacing std::HashMap with FxHashMap and replacing the topics Mutex with a RWLock I could 12x the performance to 140000 msg/s. The major improvement came by using RWLock.

The message is as follows:

Message { message_type: Publish, topic: "Ping", message: "Hi from 6" }

The performance deteriorates pretty quickly as I add more clients to 30k msg/s for 3 clients. I will continue to inspect this issue. Because as soon as I disconnect all the clients, the performace rises to 250k msg/s, there should still be room for performance improvement.

ToDo

  • Given that the majority of operations involve reading from the hashmap, and only a minority (subscribe/unsubscribe requests) modify it, there may be more efficient concurrency solutions that could further optimize performance.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages