吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 456|回复: 4
收起左侧

[讨论] go语言怎么写一个压测的服务

[复制链接]
头像被屏蔽
userbelieve123 发表于 2024-7-22 10:05
提示: 作者被禁止或删除 内容自动屏蔽

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lylswb 发表于 2024-7-22 10:54
package main

import (
        "fmt"
        "io/ioutil"
        "log"
        "math/rand"
        "net/http"
        "sync"
        "time"
)
func pressureTest(url string, concurrency int, requests int, wg *sync.WaitGroup) {
        defer wg.Done()
        client := &http.Client{}

        for i := 0; i < requests; i++ {
                start := time.Now()

                resp, err := client.Get(url)
                if err != nil {
                        log.Printf("Error making request: %v", err)
                        continue
                }
                defer resp.Body.Close()

                body, err := ioutil.ReadAll(resp.Body)
                if err != nil {
                        log.Printf("Error reading response body: %v", err)
                        continue
                }

                duration := time.Since(start)
                fmt.Printf("Request #%d took %v. Response: %s\n", i+1, duration, body)
                time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond) // 防止被目标服务器封禁
        }
}
调用
func main() {
        url := "http://example.com" // 目标URL
        concurrency := 100          // 并发数
        requestsPerClient := 100    // 每个goroutine发送的请求数

        var wg sync.WaitGroup
        wg.Add(concurrency)

        for i := 0; i < concurrency; i++ {
                go pressureTest(url, concurrency, requestsPerClient, &wg)
        }

        wg.Wait()
}
艾莉希雅 发表于 2024-7-22 12:03
jypony 发表于 2024-7-22 12:10
https://github.com/link1st/go-stress-testing
这个也不错
头像被屏蔽
 楼主| userbelieve123 发表于 2024-7-22 13:24
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-13 17:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表