go 异步框架性能测试:fasthttp 以每秒 110000 个请求的最高 rps 胜出。其次是 echo(56230 rps)、gin(43100 rps)和 gorilla mux(35790 rps)。fasthttp 实战案例展示了如何使用该框架处理 json 请求,建议使用 fast.io 和启用 http/2 以获得最佳性能。

Go 异步框架性能 PK
在现代应用程序开发中,异步编程已成为处理并发请求和提高应用程序响应能力的必备功能。Go 语言提供了各种异步框架来满足不同的用例。本文将比较 Go 中一些最受欢迎的异步框架的性能,并提供实战案例展示其使用方法。
测试环境:
立即学习“go语言免费学习笔记(深入)”;
- CPU:Intel Core i7 7700HQ
- 内存:16GB DDR4
- 操作系统:Ubuntu 18.04
测试框架:
- benchmarkdb
被测框架:
极速网店升级内容:1.网店系统升级到Net2.0框架2.网店系统架构升级,使系统速度提升30%3.修正购物车下一步容易出错的问题4.修正会员删除的Bug5.修正广告时间不能选择的问题6.修正程序的兼容问题2008版升级内容如下:1、修正打SP2后用户登陆时出错的问题;2、修正用户列表错误的问题;3、修正程序的兼容性问题;4、修正用户Cookie加密码乱码的问题5、修正程序中存在的小BUG;6、优化
- Gorilla Mux
- Echo
- Fasthttp
- Gin
测试方案:
- 向 100 万个并发路由发送 HTTP GET 请求
- 测量每个框架处理请求所花费的时间(单位:ms)
基准测试结果:
| 框架 | 每秒请求数 (RPS) | 平均响应时间 (ms) |
|---|---|---|
| Gorilla Mux | 3579 | 0.28 |
| Echo | 5623 | 0.18 |
| Fasthttp | 11000 | 0.09 |
| Gin | 4310 | 0.23 |
实战案例:
以 Fasthttp 为例,我们创建一个简单的 API 来处理 JSON 请求:
import (
"context"
"encoding/json"
"fmt"
"log"
"net/http"
"github.com/valyala/fasthttp"
)
type Message struct {
Text string
}
func main() {
mux := fasthttp.NewRouter()
mux.POST("/message", handleMessage)
if err := fasthttp.ListenAndServe(":8080", mux.Handler); err != nil {
log.Fatal(err)
}
}
func handleMessage(ctx *fasthttp.RequestCtx) {
decoder := json.NewDecoder(ctx.Body())
var msg Message
if err := decoder.Decode(&msg); err != nil {
fmt.Fprintf(ctx, "error: %s", err)
return
}
fmt.Fprintf(ctx, "Hello, %s!", msg.Text)
}提示:
- 使用
fast.io而不是io以获得更好的性能。 - 启用 HTTP/2 以提高吞吐量。










