diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2023-04-06 18:44:31 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-06 18:44:31 +0530 |
commit | 4cc8784f5b3a71b2a882ff359d593b4b74c9e89b (patch) | |
tree | 16c398325e76a7fbf4ac87f1ca9a82778e3dabca /ext/websocket/lib.rs | |
parent | 3b62a58818f83e32fc2644f44e75a5c8465b2003 (diff) |
perf(ext/websocket): replace tokio_tungstenite server with fastwebsockets (#18587)
https://github.com/littledivy/fastwebsockets
```
# This PR
./load_test 100 0.0.0.0 8080 0 0
Running benchmark now...
Msg/sec: 176355.000000
# main
./load_test 100 0.0.0.0 8080 0 0
Running benchmark now...
Msg/sec: 157198.750000
```
Diffstat (limited to 'ext/websocket/lib.rs')
-rw-r--r-- | ext/websocket/lib.rs | 39 |
1 files changed, 9 insertions, 30 deletions
diff --git a/ext/websocket/lib.rs b/ext/websocket/lib.rs index 1c586b383..71f176070 100644 --- a/ext/websocket/lib.rs +++ b/ext/websocket/lib.rs @@ -47,13 +47,16 @@ use tokio_tungstenite::tungstenite::handshake::client::Response; use tokio_tungstenite::tungstenite::protocol::frame::coding::CloseCode; use tokio_tungstenite::tungstenite::protocol::CloseFrame; use tokio_tungstenite::tungstenite::protocol::Message; -use tokio_tungstenite::tungstenite::protocol::Role; use tokio_tungstenite::tungstenite::protocol::WebSocketConfig; use tokio_tungstenite::MaybeTlsStream; use tokio_tungstenite::WebSocketStream; pub use tokio_tungstenite; // Re-export tokio_tungstenite +mod server; + +pub use server::ws_create_server_stream; + #[derive(Clone)] pub struct WsRootStore(pub Option<RootCertStore>); #[derive(Clone)] @@ -89,35 +92,6 @@ pub enum WebSocketStreamType { pub trait Upgraded: AsyncRead + AsyncWrite + Unpin {} -pub async fn ws_create_server_stream( - state: &Rc<RefCell<OpState>>, - transport: Pin<Box<dyn Upgraded>>, -) -> Result<ResourceId, AnyError> { - let ws_stream = WebSocketStream::from_raw_socket( - transport, - Role::Server, - Some(WebSocketConfig { - max_message_size: Some(128 << 20), - max_frame_size: Some(32 << 20), - ..Default::default() - }), - ) - .await; - let (ws_tx, ws_rx) = ws_stream.split(); - - let ws_resource = WsStreamResource { - stream: WebSocketStreamType::Server { - tx: AsyncRefCell::new(ws_tx), - rx: AsyncRefCell::new(ws_rx), - }, - cancel: Default::default(), - }; - - let resource_table = &mut state.borrow_mut().resource_table; - let rid = resource_table.add(ws_resource); - Ok(rid) -} - pub struct WsStreamResource { pub stream: WebSocketStreamType, // When a `WsStreamResource` resource is closed, all pending 'read' ops are @@ -549,6 +523,11 @@ deno_core::extension!(deno_websocket, op_ws_next_event, op_ws_send_binary, op_ws_send_text, + server::op_server_ws_send, + server::op_server_ws_close, + server::op_server_ws_next_event, + server::op_server_ws_send_binary, + server::op_server_ws_send_text, ], esm = [ "01_websocket.js", "02_websocketstream.js" ], options = { |