Deno 之 HTTP 模块

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:markdown

  • 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 响应对象cookie

  • Server 内部实现

HTTP 模块标准库

  • io
  • cookie
  • file_server
  • http_bench
  • http_status
  • mod
  • racing_server
  • server
相关文章
相关标签/搜索