69 lines
1.5 KiB
V
69 lines
1.5 KiB
V
// Keep-Alive HTTP 基准测试
|
|
module main
|
|
|
|
import net
|
|
import time
|
|
|
|
fn main() {
|
|
addr := '127.0.0.1:9999'
|
|
requests := 10000
|
|
|
|
println('=== Keep-Alive HTTP 基准测试 ===')
|
|
println('目标: ${addr}')
|
|
println('请求数: ${requests}')
|
|
println('')
|
|
|
|
// 建立连接
|
|
mut conn := net.dial_tcp(addr) or {
|
|
println('连接失败: ${err}')
|
|
return
|
|
}
|
|
defer { conn.close() or {} }
|
|
|
|
// 预热
|
|
println('预热中...')
|
|
for _ in 0 .. 100 {
|
|
send_keepalive_request(mut conn, addr) or {
|
|
// 重连
|
|
conn = net.dial_tcp(addr) or { continue }
|
|
continue
|
|
}
|
|
}
|
|
|
|
// 正式测试
|
|
println('开始测试...')
|
|
sw := time.new_stopwatch()
|
|
mut success := 0
|
|
|
|
for _ in 0 .. requests {
|
|
send_keepalive_request(mut conn, addr) or {
|
|
// 重连
|
|
conn = net.dial_tcp(addr) or { continue }
|
|
continue
|
|
}
|
|
success++
|
|
}
|
|
|
|
elapsed := sw.elapsed()
|
|
elapsed_ms := f64(elapsed.milliseconds())
|
|
rps := f64(success) * 1000.0 / elapsed_ms
|
|
avg_us := elapsed_ms * 1000.0 / f64(success)
|
|
|
|
println('')
|
|
println('=== 结果 ===')
|
|
println('成功请求: ${success}/${requests}')
|
|
println('总耗时: ${elapsed_ms:.0f}ms')
|
|
println('吞吐量: ${rps:.0f} req/s')
|
|
println('平均延迟: ${avg_us:.2f}μs')
|
|
}
|
|
|
|
fn send_keepalive_request(mut conn net.TcpConn, addr string) ! {
|
|
// 发送 HTTP 请求 (Keep-Alive)
|
|
request := 'GET /api/health HTTP/1.1\r\nHost: ${addr}\r\nConnection: keep-alive\r\n\r\n'
|
|
conn.write_string(request)!
|
|
|
|
// 读取响应头和体
|
|
mut buf := []u8{len: 256}
|
|
conn.read(mut buf) or {}
|
|
}
|