Gin (三) 中间件 并发测试

router.GET("/hello",calcTime,func(c *gin.Context){}) 支持多个函数,每个函数一次调用。这样就可以拦截请求

c.Next() 可以在当前函数不退出的情况下,继续执行下一个中间件,等后续的处理完了,又回到当前中间件

go 复制代码
package main

import "github.com/gin-gonic/gin"
import "fmt"
import "time"
func middleWare(c *gin.Context){
        fmt.Println("将要访问index.html")
}

func calcTime(c *gin.Context){
        time1 := time.Now().UnixNano()

        // 调用后续得代码,
        c.Next()
        newTime := time.Now().UnixNano()

        fmt.Printf("%v 纳秒",newTime - time1)
}

func main(){
        router := gin.Default()
        router.GET("/", middleWare, func(c *gin.Context){
                c.String(200, "Hello world")
        })

        router.GET("/hello",calcTime,func(c *gin.Context){
                c.String(200, "Hello world")
        })

        router.Run()
}

并发测试

wrk -t2 -c20 -d30s https://localhost:8000/hello

  • -t2 并发2个线程
  • -c20 20个并发
  • -d30s 持续时间30秒
go 复制代码
package main

import "github.com/gin-gonic/gin"
import "fmt"
import "time"
func middleWare(c *gin.Context){
        fmt.Println("将要访问index.html")
}

func calcTime(c *gin.Context){
        time1 := time.Now().UnixNano()

        // 调用后续得代码,
        c.Next()
        newTime := time.Now().UnixNano()
        _ = newTime - time1
}

func main(){
        // 关闭所有日志
        gin.SetMode(gin.ReleaseMode)
        router := gin.New()
        router.Use(gin.Recovery())

        router.GET("/", middleWare, func(c *gin.Context){
                c.String(200, "Hello world")
        })

        router.GET("/hello",calcTime,func(c *gin.Context){
                c.String(200, "Hello world")
        })

        router.Run()
}
bash 复制代码
go run main.go &
wrk -t2 -c20 -d30s http://192.168.139.204:8080/hello

Running 30s test @ http://192.168.139.204:8080/hello
  2 threads and 20 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    30.37ms   66.17ms 457.06ms   85.66%
    Req/Sec    99.33k    41.62k  181.85k    71.14%
  5472968 requests in 30.09s, 668.09MB read
Requests/sec: 181858.35
Transfer/sec:     22.20MB
相关推荐
考虑考虑8 小时前
nginx路由重写
运维·后端·自动化运维
JaguarJack9 小时前
PHP 紧急修复两项严重 RCE 漏洞,8.2 至 8.5 用户应立即升级
后端·php·服务端
BingoGo9 小时前
PHP 紧急修复两项严重 RCE 漏洞,8.2 至 8.5 用户应立即升级
后端·php
金銀銅鐵10 小时前
[Java] 展示添加元素时 ArrayList 的内部变化
java·后端·ai编程
斌糖雪梨10 小时前
spring auth 核心流程详解
java·后端·spring
高频因子挖掘机11 小时前
本地已有一年历史数据,第二天更新别只拉“昨天一天”:量化 K 线增量同步实践
后端·github·api
高频因子挖掘机12 小时前
只补缺失日期,不重拉全部历史:增量更新 K 线应该怎么设计?
后端·github·api
Gopher_HBo12 小时前
Go reflect 包动态调用与方法反射 —Call、MakeFunc 与性能
后端
码事漫谈13 小时前
人设带处境,AI 更入戏
后端
掘金酱13 小时前
【10.24 特别活动】AI 时代,程序员的新饭碗在哪里?
前端·人工智能·后端