mirror of
https://github.com/denoland/deno.git
synced 2024-11-25 15:29:32 -05:00
perf: use sendto syscalls (#19414)
This switches syscall used in HTTP and WS server from "writev" to "sendto". "DENO_USE_WRITEV=1" can be used to enable using "writev" syscall. Doing this for easier testing of various setups.
This commit is contained in:
parent
dd6458b30a
commit
0197f42e6b
4 changed files with 18 additions and 6 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -1412,6 +1412,7 @@ dependencies = [
|
|||
"fastwebsockets",
|
||||
"http",
|
||||
"hyper 0.14.26",
|
||||
"once_cell",
|
||||
"serde",
|
||||
"tokio",
|
||||
"tokio-rustls",
|
||||
|
|
|
@ -73,13 +73,13 @@ type Request = hyper1::Request<Incoming>;
|
|||
type Response = hyper1::Response<ResponseBytes>;
|
||||
|
||||
static USE_WRITEV: Lazy<bool> = Lazy::new(|| {
|
||||
let disable_writev = std::env::var("DENO_HYPER_USE_WRITEV").ok();
|
||||
let enable = std::env::var("DENO_USE_WRITEV").ok();
|
||||
|
||||
if let Some(val) = disable_writev {
|
||||
return val != "0";
|
||||
if let Some(val) = enable {
|
||||
return !val.is_empty();
|
||||
}
|
||||
|
||||
true
|
||||
false
|
||||
});
|
||||
|
||||
/// All HTTP/2 connections start with this byte string.
|
||||
|
|
|
@ -21,6 +21,7 @@ deno_tls.workspace = true
|
|||
fastwebsockets = { workspace = true, features = ["upgrade"] }
|
||||
http.workspace = true
|
||||
hyper = { workspace = true, features = ["backports"] }
|
||||
once_cell.workspace = true
|
||||
serde.workspace = true
|
||||
tokio.workspace = true
|
||||
tokio-rustls.workspace = true
|
||||
|
|
|
@ -27,6 +27,7 @@ use http::Method;
|
|||
use http::Request;
|
||||
use http::Uri;
|
||||
use hyper::Body;
|
||||
use once_cell::sync::Lazy;
|
||||
use serde::Serialize;
|
||||
use std::borrow::Cow;
|
||||
use std::cell::Cell;
|
||||
|
@ -50,9 +51,18 @@ use fastwebsockets::Frame;
|
|||
use fastwebsockets::OpCode;
|
||||
use fastwebsockets::Role;
|
||||
use fastwebsockets::WebSocket;
|
||||
|
||||
mod stream;
|
||||
|
||||
static USE_WRITEV: Lazy<bool> = Lazy::new(|| {
|
||||
let enable = std::env::var("DENO_USE_WRITEV").ok();
|
||||
|
||||
if let Some(val) = enable {
|
||||
return !val.is_empty();
|
||||
}
|
||||
|
||||
false
|
||||
});
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct WsRootStoreProvider(Option<Arc<dyn RootCertStoreProvider>>);
|
||||
|
||||
|
@ -360,7 +370,7 @@ pub fn ws_create_server_stream(
|
|||
),
|
||||
Role::Server,
|
||||
);
|
||||
ws.set_writev(true);
|
||||
ws.set_writev(*USE_WRITEV);
|
||||
ws.set_auto_close(true);
|
||||
ws.set_auto_pong(true);
|
||||
|
||||
|
|
Loading…
Reference in a new issue