Skip to content

Commit cd83cb7

Browse files
committed
Add native http benchmark
1 parent 1244091 commit cd83cb7

File tree

4 files changed

+51
-36
lines changed

4 files changed

+51
-36
lines changed

src/ops.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,10 +1114,8 @@ fn op_http_listen(
11141114
// TODO properly parse addr
11151115
let addr = SocketAddr::from_str(address).unwrap();
11161116

1117-
let http_server = http_server::create_and_bind(&addr).unwrap();
1117+
let http_server = http_server::create_and_bind(&addr)?;
11181118
let resource = resources::add_http_server(http_server);
1119-
// tokio_util::spawn(server_fut);
1120-
//tokio::spawn(server_fut);
11211119

11221120
let builder = &mut FlatBufferBuilder::new();
11231121
let inner = msg::HttpListenRes::create(

tests/http_bench.ts

Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,12 @@
11
// Used for benchmarking Deno's networking. See tools/http_benchmark.py
2-
// TODO Replace this with a real HTTP server once
3-
// https://github.com/denoland/deno/issues/726 is completed.
42
// Note: this is a keep-alive server.
53
import * as deno from "deno";
6-
const addr = deno.args[1] || "127.0.0.1:4500";
7-
const listener = deno.listen("tcp", addr);
8-
const response = new TextEncoder().encode(
9-
"HTTP/1.1 200 OK\r\nContent-Length: 12\r\n\r\nHello World\n"
10-
);
4+
const addr = deno.args[1] || "0.0.0.0:4500";
5+
const resBody = new TextEncoder().encode("Hello World\n");
116

12-
async function handle(conn: deno.Conn): Promise<void> {
13-
const buffer = new Uint8Array(1024);
14-
try {
15-
while (true) {
16-
const r = await conn.read(buffer);
17-
if (r.eof) {
18-
break;
19-
}
20-
await conn.write(response);
21-
}
22-
} finally {
23-
conn.close();
24-
}
25-
}
26-
27-
async function main(): Promise<void> {
28-
console.log("Listening on", addr);
29-
while (true) {
30-
const conn = await listener.accept();
31-
handle(conn);
32-
}
33-
}
34-
35-
main();
7+
const server = deno.httpListen(addr);
8+
server.serve((req: deno.ServerRequest, res: deno.ServerResponse) => {
9+
res.status = 200;
10+
res.headers = [["server", "ryans server"], ["content-type", "text/plain"]];
11+
res.writeResponse(resBody);
12+
});

tests/tcp_bench.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Used for benchmarking Deno's networking. See tools/http_benchmark.py
2+
// Note: this is a keep-alive server.
3+
import * as deno from "deno";
4+
const addr = deno.args[1] || "127.0.0.1:4500";
5+
const listener = deno.listen("tcp", addr);
6+
const response = new TextEncoder().encode(
7+
"HTTP/1.1 200 OK\r\nContent-Length: 12\r\n\r\nHello World\n"
8+
);
9+
10+
async function handle(conn: deno.Conn): Promise<void> {
11+
const buffer = new Uint8Array(1024);
12+
try {
13+
while (true) {
14+
const r = await conn.read(buffer);
15+
if (r.eof) {
16+
break;
17+
}
18+
await conn.write(response);
19+
}
20+
} finally {
21+
conn.close();
22+
}
23+
}
24+
25+
async function main(): Promise<void> {
26+
console.log("Listening on", addr);
27+
while (true) {
28+
const conn = await listener.accept();
29+
handle(conn);
30+
}
31+
}
32+
33+
main();

tools/http_benchmark.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,15 @@
1010
DURATION = "10s"
1111

1212

13+
def deno_tcp_benchmark(deno_exe):
14+
deno_cmd = [deno_exe, "--allow-net", "tests/tcp_bench.ts", ADDR]
15+
print "http_benchmark testing DENO TCP."
16+
return run(deno_cmd)
17+
18+
1319
def deno_http_benchmark(deno_exe):
1420
deno_cmd = [deno_exe, "--allow-net", "tests/http_bench.ts", ADDR]
15-
print "http_benchmark testing DENO."
21+
print "http_benchmark testing DENO HTTP."
1622
return run(deno_cmd)
1723

1824

@@ -37,7 +43,8 @@ def hyper_http_benchmark(hyper_hello_exe):
3743
def http_benchmark(deno_exe, hyper_hello_exe):
3844
r = {}
3945
# TODO Rename to "deno_tcp"
40-
r["deno"] = deno_http_benchmark(deno_exe)
46+
r["deno"] = deno_tcp_benchmark(deno_exe)
47+
r["deno_http"] = deno_http_benchmark(deno_exe)
4148
r["node"] = node_http_benchmark()
4249
r["node_tcp"] = node_tcp_benchmark()
4350
r["hyper"] = hyper_http_benchmark(hyper_hello_exe)

0 commit comments

Comments
 (0)