netkit/http/writer

这个模块定义 HTTP 相关的写操作的抽象。

概述

服务器将响应发给客户端,客户端将请求发给服务器。

HttpWriter 是写操作的基对象, ServerResponseClientRequest 继承自该对象。 ServerResponse 表示服务器发出的响应, ClientRequest 表示客户端发出的请求。

Types

HttpWriter = ref object of RootObj
  conn: HttpConnection
  lock: AsyncLock
  onEnd: proc () {...}{.gcsafe, closure.}
  writable: bool
表示 HTTP 相关的写操作。   Source Edit
ServerResponse = ref object of HttpWriter
表示服务器发出的响应。   Source Edit
ClientRequest = ref object of HttpWriter
表示客户端发出的请求。   Source Edit

Procs

proc newServerResponse(conn: HttpConnection; onEnd: proc () {...}{.gcsafe, closure.}): ServerResponse {...}{.
    raises: [], tags: [].}
创建一个新的 ServerResponse 。   Source Edit
proc newClientRequest(conn: HttpConnection; onEnd: proc () {...}{.gcsafe, closure.}): ClientRequest {...}{.
    raises: [], tags: [].}
创建一个新的 ClientRequest 。   Source Edit
proc ended(writer: HttpWriter): bool {...}{.inline, raises: [], tags: [].}
如果底部连接已断开或写端已经关闭,则返回 true 。   Source Edit
proc write(writer: HttpWriter; buf: pointer; size: Natural): Future[void] {...}{.raises: [],
    tags: [].}

buf 写入 size 字节的数据。

如果写过程中出现系统错误,则会触发 OSError 异常;如果在成功写之前连接断开或者写端已经关闭,则会触发 WriteAbortedError 异常。

  Source Edit
proc write(writer: HttpWriter; data: string): Future[void] {...}{.raises: [], tags: [].}

写入一个字符串。

如果写过程中出现系统错误,则会触发 OSError 异常;如果在成功写之前连接断开或者写端已经关闭,则会触发 WriteAbortedError 异常。

  Source Edit
proc write(writer: HttpWriter; statusCode: HttpCode;
          fields: openArray[tuple[name: string, value: string]]): Future[void] {...}{.
    raises: [], tags: [].}

写入一个消息头。

如果写过程中出现系统错误,则会触发 OSError 异常;如果在成功写之前连接断开或者写端已经关闭,则会触发 WriteAbortedError 异常。

  Source Edit
proc write(writer: HttpWriter; statusCode: HttpCode;
          fields: openArray[tuple[name: string, value: seq[string]]]): Future[void] {...}{.
    raises: [], tags: [].}

写入一个消息头。

如果写过程中出现系统错误,则会触发 OSError 异常;如果在成功写之前连接断开或者写端已经关闭,则会触发 WriteAbortedError 异常。

  Source Edit
proc writeEnd(writer: HttpWriter) {...}{.raises: [], tags: [].}
关闭写端。之后,不能继续向 writer 写入数据,否则将引发 WriteAbortedError 异常。   Source Edit