我正在尝试编写一个简单的程序,该程序每秒发送给定数量的并发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请求。