diff --git a/cli/bench/http/deno_http_ops.js b/cli/bench/http/deno_http_ops.js new file mode 100644 index 0000000000..aac5cea726 --- /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); + } + })(); +}