summaryrefslogtreecommitdiff
path: root/cli/bench/http/deno_http_ops.js
blob: 216a47905d5467b9712c361ed2f64b40e2289ce6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.

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[Deno.internal].core.opAsync(
          "op_http_accept",
          this.id,
        );
        return { value: reqEvt ?? undefined, done: reqEvt === null };
      },
    };
  }
}

for await (const conn of tcp) {
  const id = Deno[Deno.internal].core.ops.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[Deno.internal].core.opAsync(
        "op_http_write_headers",
        stream,
        200,
        [],
        "Hello World",
      );
      Deno[Deno.internal].core.close(stream);
    }
  })();
}