Reusing Connections
Selium supports reusing connections to the Selium server, otherwise known as multiplexing. This allows you to maintain a single connection that publishes and/or subscribes to multiple topics simultaneously.
Let's have another look at that code from the previous chapter:
async fn main() -> Result<(), Box<dyn std::error::Error>> { let connection = selium::custom() ... let mut publisher = connection .publisher("/some/topic") // choose a topic to group similar messages together .with_encoder(StringCodec) // allows you to exchange string messages between clients .open() // opens a new stream for sending data .await?; let mut subscriber = connection .subscriber("/some/topic") // subscribe to the publisher's topic .with_decoder(StringCodec) // use the same codec as the publisher .open() // opens a new stream for receiving data .await?; ... Ok(()) }
We can see that each time a new behaviour is required, we create a new stream using
Client::publisher
and Client::subscriber
. For each new stream, the full range of builder
options is available, uniquely for that stream.
Next, let's see how we can send/receive data more ergonomically with
Stream
and Sink
traits.