[x] Use stream splitting i.e let (sender, receiver) = stream.split();
[x] Top-level mutable struct for local ws state management e.g
/// Subscriber is an actor that handles a single websocket connection.
/// It listens to the store for updates and sends them to the client.
pub struct Subscriber<S> {
id: SubscriberId,
ip_addr: Option<IpAddr>,
closed: bool,
state: Arc<S>,
ws_state: Arc<WsState>,
notify_receiver: Receiver<AggregationEvent>,
receiver: SplitStream<WebSocket>,
sender: SplitSink<WebSocket, Message>,
price_feeds_with_config: HashMap<PriceIdentifier, PriceFeedClientConfig>,
ping_interval: tokio::time::Interval,
exit: watch::Receiver<bool>,
responded_to_ping: bool,
}
[x] Prometheus Metrics
[x] Top-level error handling to avoid all the if ..is_err()
let (sender, receiver) = stream.split();
if ..is_err()