每秒使用通道多个GET请求

时间:2019-05-05 19:34:44

标签: go concurrency

我正在尝试编写一个简单的程序,该程序每秒发送给定数量的并发GET请求,因此,假设我想以每秒5个的频率发送10个请求。在这种情况下,这意味着我们要发送5个并发请求两次,总共10个请求。

我已经使用渠道实现了这一点,但是我不确定这是否是正确的方法:

已编辑

package main

import (
    "fmt"
    "time"
    "net/http"
)

func main() {
    transactions := 10
    frequency := 5
    prepareRequests(frequency, transactions)

}

func prepareRequests(frequency int, transactions int) {
    transactionsPerSecond := transactions / frequency
    c := make(chan string)
    link := "http://google.com"
    for i := 0; i < transactionsPerSecond; i++ {
        fmt.Println("batch: ", i+1)
        for j := 0; j < frequency; j++ {
            go sendRequests(link, c)
        }
        time.Sleep(time.Duration(1) * time.Second)

    }

    for k :=0; k < frequency; k++ {
        fmt.Println(<-c)
    }
}

func sendRequests(l string, c chan string) {
    _, err := http.Get(l)
    if err != nil {
        fmt.Println(l, "might be down!")
        c <- l
        return
    }

    c <- l
}

已更新 go playground

这是正确的吗?似乎可以正常工作,但是我不确定我实际上是通过子例程发送并发的GET请求。

0 个答案:

没有答案