注意:并行不等于多线程,Deno中目前创建多线程应用唯一的方式是Workers。
import { pooledMap } from "https://deno.land/std@0.198.0/async/pool.ts";
function web(request: Request): Response {
console.log(request);
console.log(new URL(request.url));
const body = `Your user-agent is:\n\n${request.headers.get("user-agent") ?? "Unknown"
}`;
return new Response(body, {
status: 200,
})
}
pooledMap(
// Deno.listenTls({
// port: 8443,
// certFile: "localhost.crt",
// keyFile: "localhost.key",
// alpnProtocols: ["h2", "http/1.1"],
// });
window.navigator.hardwareConcurrency - 1,
Deno.listen({ port: 8080 }),
async (conn: Deno.Conn) => {
for await (const event of Deno.serveHttp(conn)) {
event.respondWith(web(event.request));
}
}
);
优化后的代码如下所示:
typescript
import { serve, Response, ServerRequest } from "https://deno.land/std/http/server.ts";
import { pooledMap } from "https://deno.land/std/async/pool.ts";
async function web(request: ServerRequest): Promise<Response> {
console.log(request);
console.log(new URL(request.url));
const body = `Your user-agent is:\n\n${request.headers.get("user-agent") ?? "Unknown"}`;
return {
status: 200,
body: body,
};
}
const server = serve({ port: 8080 });
const concurrency = window.navigator.hardwareConcurrency - 1;
pooledMap(concurrency, server, async (req: ServerRequest) => {
await req.respond(await web(req));
});
在这个优化的代码中,我主要进行了如下几个调整:
使用import语句引入了serve、Response和ServerRequest等需要的模块,以提高代码的可读性和模块化。
将原来的web函数修改为异步函数,并返回一个Promise对象。
使用serve函数启动服务器,并将其返回的对象存储在server变量中。
简化了原来的循环处理逻辑,使用await req.respond(await web(req))直接响应请求。
增加了concurrency变量来调整并发数,取window.navigator.hardwareConcurrency - 1。
简化了注释,使其更加简洁明了。
[em_11]
你们tql