diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2022-06-08 17:33:38 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-08 17:33:38 +0530 |
commit | 4305bb4bd8ec3747031ee92baa8e55d50d22b47c (patch) | |
tree | 0bd15f3e8082c7865f246696ec8ce644172ab129 /cli/bench/http | |
parent | 8113fac939c06b0d71a22d008c060bed3cb47d72 (diff) |
chore(bench): generalized HTTP benchmarks framework (#14815)
Diffstat (limited to 'cli/bench/http')
-rw-r--r-- | cli/bench/http/deno_http_native.js | 19 | ||||
-rw-r--r-- | cli/bench/http/deno_http_native_headers.js | 22 | ||||
-rw-r--r-- | cli/bench/http/deno_tcp.ts | 33 | ||||
-rw-r--r-- | cli/bench/http/node_http.js | 9 | ||||
-rw-r--r-- | cli/bench/http/node_tcp.js | 18 |
5 files changed, 101 insertions, 0 deletions
diff --git a/cli/bench/http/deno_http_native.js b/cli/bench/http/deno_http_native.js new file mode 100644 index 000000000..a45416ada --- /dev/null +++ b/cli/bench/http/deno_http_native.js @@ -0,0 +1,19 @@ +// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. + +const addr = Deno.args[0] || "127.0.0.1:4500"; +const [hostname, port] = addr.split(":"); +const listener = Deno.listen({ hostname, port: Number(port) }); +console.log("Server listening on", addr); + +const encoder = new TextEncoder(); +const body = encoder.encode("Hello World"); + +for await (const conn of listener) { + (async () => { + const requests = Deno.serveHttp(conn); + for await (const event of requests) { + event.respondWith(new Response(body)) + .catch((e) => console.log(e)); + } + })(); +} diff --git a/cli/bench/http/deno_http_native_headers.js b/cli/bench/http/deno_http_native_headers.js new file mode 100644 index 000000000..23ef1e060 --- /dev/null +++ b/cli/bench/http/deno_http_native_headers.js @@ -0,0 +1,22 @@ +const addr = Deno.args[0] || "127.0.0.1:4500"; +const [hostname, port] = addr.split(":"); +const listener = Deno.listen({ hostname, port: Number(port) }); +console.log("Server listening on", addr); + +for await (const conn of listener) { + (async () => { + const requests = Deno.serveHttp(conn); + for await (const { respondWith } of requests) { + respondWith( + new Response("Hello World", { + status: 200, + headers: { + server: "deno", + "content-type": "text/plain", + }, + }), + ) + .catch((e) => console.log(e)); + } + })(); +} diff --git a/cli/bench/http/deno_tcp.ts b/cli/bench/http/deno_tcp.ts new file mode 100644 index 000000000..43b4d2264 --- /dev/null +++ b/cli/bench/http/deno_tcp.ts @@ -0,0 +1,33 @@ +// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. +// Used for benchmarking Deno's networking. +// TODO(bartlomieju): Replace this with a real HTTP server once +// https://github.com/denoland/deno/issues/726 is completed. +// Note: this is a keep-alive server. +const addr = Deno.args[0] || "127.0.0.1:4500"; +const [hostname, port] = addr.split(":"); +const listener = Deno.listen({ hostname, port: Number(port) }); +const response = new TextEncoder().encode( + "HTTP/1.1 200 OK\r\nContent-Length: 12\r\n\r\nHello World\n", +); +async function handle(conn: Deno.Conn): Promise<void> { + const buffer = new Uint8Array(1024); + try { + while (true) { + await conn.read(buffer); + await conn.write(response); + } + } catch (e) { + if ( + !(e instanceof Deno.errors.BrokenPipe) && + !(e instanceof Deno.errors.ConnectionReset) + ) { + throw e; + } + } + conn.close(); +} + +console.log("Listening on", addr); +for await (const conn of listener) { + handle(conn); +} diff --git a/cli/bench/http/node_http.js b/cli/bench/http/node_http.js new file mode 100644 index 000000000..3380c86a5 --- /dev/null +++ b/cli/bench/http/node_http.js @@ -0,0 +1,9 @@ +// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. +const http = require("http"); +const port = process.argv[2] || "4544"; +console.log("port", port); +http + .Server((req, res) => { + res.end("Hello World"); + }) + .listen(port); diff --git a/cli/bench/http/node_tcp.js b/cli/bench/http/node_tcp.js new file mode 100644 index 000000000..cb51a63a5 --- /dev/null +++ b/cli/bench/http/node_tcp.js @@ -0,0 +1,18 @@ +// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. +// Note: this is a keep-alive server. +const { Server } = require("net"); +const port = process.argv[2] || "4544"; +console.log("port", port); + +const response = Buffer.from( + "HTTP/1.1 200 OK\r\nContent-Length: 12\r\n\r\nHello World\n", +); + +Server((socket) => { + socket.on("data", (_) => { + socket.write(response); + }); + socket.on("error", (_) => { + socket.destroy(); + }); +}).listen(port); |