V-lang:如何每秒发送 +2500 个 HTTP 请求?
V-lang: How to send +2500 HTTP requests per second?
我打算用 V 编写我的抓取工具,我估计需要每秒发送约 2500 个请求,但无法弄清楚我做错了什么,它应该同时发送,但现在速度非常慢。感觉我做错了什么,但我想不通。
import net.http
import sync
import time
fn send_request(mut wg sync.WaitGroup) ?string {
start := time.ticks()
data := http.get('https://google.com')?
finish := time.ticks()
println('Finish getting time ${finish - start} ms')
wg.done()
return data.text
}
fn main() {
mut wg := sync.new_waitgroup()
for i := 0; i < 50; i++ {
wg.add(1)
go send_request(mut wg)
}
wg.wait()
}
输出:
...
Finish getting time 2157 ms
Finish getting time 2173 ms
Finish getting time 2174 ms
Finish getting time 2200 ms
Finish getting time 2225 ms
Finish getting time 2380 ms
Finish getting time 2678 ms
Finish getting time 2770 ms
V 版本:0.1.29
系统:Ubuntu20.04
你没有做错任何事。我以多种方式在多种语言中获得了相似的结果。许多站点都有速率限制软件,可以防止像这样重复读取,这就是您 运行 所要面对的。
您现在可以尝试使用频道,但您仍然会运行遇到速率限制器。
发送那么多 get 请求的最佳方法也是使用所谓的 Head 请求,它依赖于状态代码而不是响应,因为它 return 没有任何。这就是使 http 请求更快的原因。
我打算用 V 编写我的抓取工具,我估计需要每秒发送约 2500 个请求,但无法弄清楚我做错了什么,它应该同时发送,但现在速度非常慢。感觉我做错了什么,但我想不通。
import net.http
import sync
import time
fn send_request(mut wg sync.WaitGroup) ?string {
start := time.ticks()
data := http.get('https://google.com')?
finish := time.ticks()
println('Finish getting time ${finish - start} ms')
wg.done()
return data.text
}
fn main() {
mut wg := sync.new_waitgroup()
for i := 0; i < 50; i++ {
wg.add(1)
go send_request(mut wg)
}
wg.wait()
}
输出:
...
Finish getting time 2157 ms
Finish getting time 2173 ms
Finish getting time 2174 ms
Finish getting time 2200 ms
Finish getting time 2225 ms
Finish getting time 2380 ms
Finish getting time 2678 ms
Finish getting time 2770 ms
V 版本:0.1.29
系统:Ubuntu20.04
你没有做错任何事。我以多种方式在多种语言中获得了相似的结果。许多站点都有速率限制软件,可以防止像这样重复读取,这就是您 运行 所要面对的。
您现在可以尝试使用频道,但您仍然会运行遇到速率限制器。
发送那么多 get 请求的最佳方法也是使用所谓的 Head 请求,它依赖于状态代码而不是响应,因为它 return 没有任何。这就是使 http 请求更快的原因。