1
0
Fork 0
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:
Bartek Iwańczuk 2023-06-08 12:55:33 +02:00 committed by GitHub
parent dd6458b30a
commit 0197f42e6b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 18 additions and 6 deletions

1
Cargo.lock generated
View file

@ -1412,6 +1412,7 @@ dependencies = [
"fastwebsockets",
"http",
"hyper 0.14.26",
"once_cell",
"serde",
"tokio",
"tokio-rustls",

View file

@ -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.

View file

@ -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

View file

@ -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);