Concurrency V-lang:如何发送+;每秒2500个HTTP请求?

Concurrency V-lang:如何发送+;每秒2500个HTTP请求?,concurrency,vlang,Concurrency,Vlang,我计划用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 := t

我计划用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()
}
V版本:0.1.29


系统:Ubuntu 20.04

你没有做错任何事。我在多种语言中以多种方式得到了类似的结果。许多网站都有限速软件,可以防止像这样的重复阅读,这正是你所面临的


您可以尝试使用频道,但您仍然会遇到速率限制。

发送这么多get请求的最佳方式它也使用所谓的Head请求,它依赖于状态代码而不是响应,因为它不会返回任何请求。这就是http请求更快的原因。

我也怀疑这可能是网络瓶颈,但我使用Python之类的解释语言获得了更好的结果,而且比GO的性能慢得多,因为它主要依赖于网络操作和一些套接字API调用,但是频道听起来值得一试,谢谢。我认为操作系统对一次可以建立多少个连接也有限制。我在Linux和Mac上遇到过这个问题。也就是说,您可能希望实现一个队列,每次100个。可能需要一个代理旋转器。您的ip可能已被限制。
v
中的
net.http
是否支持代理?
...
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