Open heguangyu5 opened 2 weeks ago
当前 header 和 body 用的是一个 struct buffer wb, 发送响应时要先发header,再发body.
struct buffer wb
一个 handler 在刚开始可能并不能确定是要返回 200, 还是 500, 在执行过程中会有输出, 这时只能用一个临时 buffer 来缓存这些输出, 当能确定返回状态码后, 先 send headers, 再把这个临时 buffer 的内容 append 到 wb 里,导致内存用量 x2.
比如:
// 一些逻辑产生输出 struct buffer tmp; buffer_put_data(&tmp, "xxx", 3); // 执行到这里发现出错了 if (error) { buffer_free(&tmp); conn->send_error(...) } else { conn->send_head(conn, HTTP_STATUS_OK, ...) conn->end_headers(conn); conn->send(conn, buffer_data(&tmp), buffer_length(&tmp)); buffer_free(&tmp); }
header 和 body 使用两个 buffer 的话, 可以把 body buffer 通过接口让 handler 可以把数据缓存进去, conn->send() 时先发 header buffer, 再发 body buffer.
当前 header 和 body 用的是一个
struct buffer wb
, 发送响应时要先发header,再发body.一个 handler 在刚开始可能并不能确定是要返回 200, 还是 500, 在执行过程中会有输出, 这时只能用一个临时 buffer 来缓存这些输出, 当能确定返回状态码后, 先 send headers, 再把这个临时 buffer 的内容 append 到 wb 里,导致内存用量 x2.
比如:
header 和 body 使用两个 buffer 的话, 可以把 body buffer 通过接口让 handler 可以把数据缓存进去, conn->send() 时先发 header buffer, 再发 body buffer.