Я пытаюсь написать простую программу, которая отправляет определенное количество одновременных GET-запросов в секунду, поэтому предположим, что я хочу отправлять 10 запросов с частотой 5 в секунду. В данном случае это означает, что мы хотим отправить 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
}
Обновлен
игровая площадка
Это правильно? Кажется, работает, но я не уверен, что на самом деле я посылаю параллельный запрос GET через подпрограммы.