summaryrefslogtreecommitdiff
path: root/ext/websocket/lib.rs
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2023-04-06 18:44:31 +0530
committerGitHub <noreply@github.com>2023-04-06 18:44:31 +0530
commit4cc8784f5b3a71b2a882ff359d593b4b74c9e89b (patch)
tree16c398325e76a7fbf4ac87f1ca9a82778e3dabca /ext/websocket/lib.rs
parent3b62a58818f83e32fc2644f44e75a5c8465b2003 (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.rs39
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 = {