From f2021e23829f5dc08c2a8cbce59350318f9758e9 Mon Sep 17 00:00:00 2001 From: Toshit Chawda Date: Sun, 14 Apr 2024 14:59:15 -0700 Subject: [PATCH] improve performance --- server/src/main.rs | 6 ++++-- wisp/src/fastwebsockets.rs | 26 ++++++++++++-------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/server/src/main.rs b/server/src/main.rs index a4d269a..a529872 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -309,11 +309,13 @@ async fn accept_ws( let rx = FragmentCollectorRead::new(rx); println!("{:?}: connected", addr); + // to prevent memory ""leaks"" because users are sending in packets way too fast the buffer + // size is set to 32 let (mut mux, fut) = if mux_options.enforce_auth { let (mut mux, fut) = ServerMux::new( rx, tx, - u32::MAX, + 32, Some(mux_options.auth.as_slice()), ) .await?; @@ -331,7 +333,7 @@ async fn accept_ws( } (mux, fut) } else { - ServerMux::new(rx, tx, u32::MAX, Some(&[Box::new(UdpProtocolExtensionBuilder())])).await? + ServerMux::new(rx, tx, 32, Some(&[Box::new(UdpProtocolExtensionBuilder())])).await? }; println!( diff --git a/wisp/src/fastwebsockets.rs b/wisp/src/fastwebsockets.rs index 548649f..cd0199c 100644 --- a/wisp/src/fastwebsockets.rs +++ b/wisp/src/fastwebsockets.rs @@ -1,5 +1,7 @@ +use std::ops::Deref; + use async_trait::async_trait; -use bytes::Bytes; +use bytes::BytesMut; use fastwebsockets::{ FragmentCollectorRead, Frame, OpCode, Payload, WebSocketError, WebSocketWrite, }; @@ -24,29 +26,25 @@ impl From for crate::ws::OpCode { } impl From> for crate::ws::Frame { - fn from(mut frame: Frame) -> Self { + fn from(frame: Frame) -> Self { Self { finished: frame.fin, opcode: frame.opcode.into(), - payload: Bytes::copy_from_slice(frame.payload.to_mut()), + payload: BytesMut::from(frame.payload.deref()).freeze(), } } } -impl From for Frame<'_> { +impl<'a> From for Frame<'a> { fn from(frame: crate::ws::Frame) -> Self { use crate::ws::OpCode::*; + let payload = Payload::Owned(frame.payload.into()); match frame.opcode { - Text => Self::text(Payload::Owned(frame.payload.to_vec())), - Binary => Self::binary(Payload::Owned(frame.payload.to_vec())), - Close => Self::close_raw(Payload::Owned(frame.payload.to_vec())), - Ping => Self::new( - true, - OpCode::Ping, - None, - Payload::Owned(frame.payload.to_vec()), - ), - Pong => Self::pong(Payload::Owned(frame.payload.to_vec())), + Text => Self::text(payload), + Binary => Self::binary(payload), + Close => Self::close_raw(payload), + Ping => Self::new(true, OpCode::Ping, None, payload), + Pong => Self::pong(payload), } } }