std/Http
import { serve } from "https://deno.land/std/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
req.respond({ body: "Hello World\n" });
}
server.ts 源码
对外暴露的 API:
- ServerRequest
export class ServerRequest {
// logic
}
- Server
export class Server implements AsyncIterable<ServerRequest> {
private closing = false;
private connections: Conn[] = [];
constructor(public listener: Listener) { }
close(): void {}
private async *iterateHttpRequests(
conn: Conn
): AsyncIterableIterator<ServerRequest> {}
private trackConnection(conn: Conn): void {}
private untrackConnection(conn: Conn): void {}
private async *acceptConnAndIterateHttpRequests(
mux: MuxAsyncIterator<ServerRequest>
): AsyncIterableIterator<ServerRequest> {}
[Symbol.asyncIterator](): AsyncIterableIterator<ServerRequest> {}
}
- serve
function serve(addr: string | HTTPOptions): Server {
if (typeof addr === "string") {
const [hostname, port] = addr.split(":");
addr = { hostname, port: Number(port) };
}
const listener = listen(addr);
return new Server(listener);
}
- listenAndServe
export async function listenAndServe(
addr: string | HTTPOptions,
handler: (req: ServerRequest) => void
): Promise<void> {}
- serveTLS
export function serveTLS(options: HTTPSOptions): Server {}
- Response
export interface Response {}
可迭代的异步服务
Server 类的实例是可迭代的,内部包好 req, res 响应对象
- Server 内部实现
HTTP 模块标准库
- io
- cookie
- file_server
- http_bench
- http_status
- mod
- racing_server
- server