summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2022-07-02 19:39:25 +0530
committerGitHub <noreply@github.com>2022-07-02 19:39:25 +0530
commit97a7f8d54dd94e258ece3c42871797e08530738c (patch)
treebfc2b7b5550537b0556560abbeb11abe3512654d
parentd7feddfca0eed8faf43d52e625f6fb42327310ef (diff)
chore(cli/bench): benchmark for raw HTTP ops (#15043)
-rw-r--r--cli/bench/http/deno_http_ops.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/cli/bench/http/deno_http_ops.js b/cli/bench/http/deno_http_ops.js
new file mode 100644
index 000000000..aac5cea72
--- /dev/null
+++ b/cli/bench/http/deno_http_ops.js
@@ -0,0 +1,38 @@
+const addr = Deno.args[0] || "127.0.0.1:4500";
+const [hostname, port] = addr.split(":");
+const tcp = Deno.listen({ hostname, port: Number(port) });
+console.log("Server listening on", addr);
+
+class Http {
+ id;
+ constructor(id) {
+ this.id = id;
+ }
+ [Symbol.asyncIterator]() {
+ return {
+ next: async () => {
+ const reqEvt = await Deno.core.opAsync("op_http_accept", this.id);
+ return { value: reqEvt ?? undefined, done: reqEvt === null };
+ },
+ };
+ }
+}
+
+for await (const conn of tcp) {
+ const id = Deno.core.opSync("op_http_start", conn.rid);
+ const http = new Http(id);
+ (async () => {
+ for await (const req of http) {
+ if (req == null) continue;
+ const { 0: stream } = req;
+ await Deno.core.opAsync(
+ "op_http_write_headers",
+ stream,
+ 200,
+ [],
+ "Hello World",
+ );
+ Deno.core.close(stream);
+ }
+ })();
+}