import jsc from "bun:jsc";
import { createServer, Server } from "node:http";
import { URL } from "node:url";
import zlib from "node:zlib";
const data = `
Create Next App Get started by editing app/page.tsx. Save and see your changes instantly. `;
function listen(server: Server, protocol: string = "http"): Promise {
return new Promise((resolve, reject) => {
const timeout = setTimeout(() => reject("Timed out"), 5000).unref();
server.listen({ port: 0 }, (err, hostname, port) => {
clearTimeout(timeout);
if (err) {
reject(err);
} else {
resolve(new URL(`${protocol}://${hostname}:${port}`));
}
});
});
}
const baseline = process.memoryUsage.rss();
let count = 0;
var server = createServer(async (req, res) => {
res.writeHead(200, { "Content-Type": "application/gzip" });
const gz = zlib.createGzip();
gz.pipe(res);
for (let i = 0; i < 10; i++) gz.write(data);
await Bun.sleep(10);
for (let i = 0; i < 10; i++) gz.write(data);
await Bun.sleep(10);
for (let i = 0; i < 10; i++) gz.write(data);
for (let i = 0; i < 10; i++) gz.write(data);
await Bun.sleep(10);
for (let i = 0; i < 10; i++) gz.write(data);
for (let i = 0; i < 10; i++) gz.write(data);
for (let i = 0; i < 10; i++) gz.write(data);
gz.end();
count += 1;
if (count % 1000 === 0) {
Bun.gc(true);
console.log("count", count, process.memoryUsage.rss());
}
if (count == 10_000) {
Bun.gc(true);
const after = process.memoryUsage.rss();
console.log("heapStats", jsc.heapStats());
process.send({ baseline, after });
}
});
const url = await listen(server);
console.log("server", "listening on", url.port);
process.send(url.port);