improve performance

This commit is contained in:
Toshit Chawda 2024-04-14 14:59:15 -07:00
parent ace9bf380d
commit f2021e2382
No known key found for this signature in database
GPG key ID: 91480ED99E2B3D9D
2 changed files with 16 additions and 16 deletions

View file

@ -309,11 +309,13 @@ async fn accept_ws(
let rx = FragmentCollectorRead::new(rx); let rx = FragmentCollectorRead::new(rx);
println!("{:?}: connected", addr); 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) = if mux_options.enforce_auth {
let (mut mux, fut) = ServerMux::new( let (mut mux, fut) = ServerMux::new(
rx, rx,
tx, tx,
u32::MAX, 32,
Some(mux_options.auth.as_slice()), Some(mux_options.auth.as_slice()),
) )
.await?; .await?;
@ -331,7 +333,7 @@ async fn accept_ws(
} }
(mux, fut) (mux, fut)
} else { } else {
ServerMux::new(rx, tx, u32::MAX, Some(&[Box::new(UdpProtocolExtensionBuilder())])).await? ServerMux::new(rx, tx, 32, Some(&[Box::new(UdpProtocolExtensionBuilder())])).await?
}; };
println!( println!(

View file

@ -1,5 +1,7 @@
use std::ops::Deref;
use async_trait::async_trait; use async_trait::async_trait;
use bytes::Bytes; use bytes::BytesMut;
use fastwebsockets::{ use fastwebsockets::{
FragmentCollectorRead, Frame, OpCode, Payload, WebSocketError, WebSocketWrite, FragmentCollectorRead, Frame, OpCode, Payload, WebSocketError, WebSocketWrite,
}; };
@ -24,29 +26,25 @@ impl From<OpCode> for crate::ws::OpCode {
} }
impl From<Frame<'_>> for crate::ws::Frame { impl From<Frame<'_>> for crate::ws::Frame {
fn from(mut frame: Frame) -> Self { fn from(frame: Frame) -> Self {
Self { Self {
finished: frame.fin, finished: frame.fin,
opcode: frame.opcode.into(), opcode: frame.opcode.into(),
payload: Bytes::copy_from_slice(frame.payload.to_mut()), payload: BytesMut::from(frame.payload.deref()).freeze(),
} }
} }
} }
impl From<crate::ws::Frame> for Frame<'_> { impl<'a> From<crate::ws::Frame> for Frame<'a> {
fn from(frame: crate::ws::Frame) -> Self { fn from(frame: crate::ws::Frame) -> Self {
use crate::ws::OpCode::*; use crate::ws::OpCode::*;
let payload = Payload::Owned(frame.payload.into());
match frame.opcode { match frame.opcode {
Text => Self::text(Payload::Owned(frame.payload.to_vec())), Text => Self::text(payload),
Binary => Self::binary(Payload::Owned(frame.payload.to_vec())), Binary => Self::binary(payload),
Close => Self::close_raw(Payload::Owned(frame.payload.to_vec())), Close => Self::close_raw(payload),
Ping => Self::new( Ping => Self::new(true, OpCode::Ping, None, payload),
true, Pong => Self::pong(payload),
OpCode::Ping,
None,
Payload::Owned(frame.payload.to_vec()),
),
Pong => Self::pong(Payload::Owned(frame.payload.to_vec())),
} }
} }
} }