Files
v-hono/keepalive_issue_demo

V 语言 HTTP Keep-Alive 问题最小复现

问题描述

V 语言标准库 net.http.Server 不支持 HTTP Keep-Alive 连接复用。 每次请求处理完成后,服务器会立即关闭 TCP 连接。

运行方式

1. 启动服务器

v run server.v

2. 运行客户端测试(新终端)

v run client.v

预期 vs 实际

请求 预期 (Keep-Alive 正常) 实际 (V 当前行为)
#1 ~300ms (新连接) ~300ms
#2 ~1-10ms (复用) ~300ms
#3 ~1-10ms (复用) ~300ms
#4 ~1-10ms (复用) ~300ms
#5 ~1-10ms (复用) ~300ms

根本原因

vlib/net/http/server.v 中的 handle_conn 函数:

fn (mut w HandlerWorker) handle_conn(mut conn net.TcpConn) {
    defer {
        conn.close() or { ... }  // <-- 每次请求后关闭连接
    }
    // 只处理单个请求,然后关闭
}

临时解决方案

在 V 服务器前部署 nginx 等反向代理来处理 Keep-Alive。