Fiber高性能web框架
Fiber介绍
Fiber是基于使用Go语言编写的最快的HTTP引擎fasthttp
构建。旨在通过零内存分配
和高性能服务
,使快速开发web服务更加简单。
关于fasthttp
做一个简单的介绍:fasthttp
是一款高性能网络请求库。如果我们的服务需要每秒处理数千个请求,并且需要一致的低毫秒响应时间,那么fasthttp
是最佳选择。否则对于大多数情况来说,net/http
更好,因为它更易于使用并且可以处理更多情况,比如gin
框架底层网络请求就是用net/http
实现的。同时这也从侧面说明,Fiber
的请求与Gin
在处理request
和response
上是不兼容的。
实例
package main import "github.com/gofiber/fiber/v2" func main() { app := fiber.New() app.Get("/", func(c *fiber.Ctx) error { return c.SendString("Hello, World 👋!") }) app.Listen(":3000") }
我们可以看到创建一个服务实例是非常简单的,使用中间件也是和Gin
框架类似,只需要用Use
注册即可。比如:
func main() { app := fiber.New() // Match any route app.Use(func(c *fiber.Ctx) error { // 全局中间件 所有请求都会进入 fmt.Println("🥇 First handler") return c.Next() }) // Match all routes starting with /api app.Use("/api", func(c *fiber.Ctx) error { // /api中间件 只有api前缀的才可以进入 fmt.Println("🥈 Second handler") return c.Next() }) // GET /api/register app.Get("/api/list", func(c *fiber.Ctx) error { fmt.Println("🥉 Last handler") return c.SendString("Hello, World 👋!") }) log.Fatal(app.Listen(":3000")) }
基准测试
上图可以看出Fiber
每秒处理请求数达到惊人的35万次,而fasthttp
也是这个上限,它俩不相上下。可以看到Gin
框架大概在5万/秒,差距不是一般的大。
上图可以看出Fiber
分配内存更快,几乎在60ms以内就可以完成,速度相当惊人。
特点
- 强大的路由
- 静态文件服务
- 极限性能
- 低内存占用
API
接口- 中间件和
Next
支持 - 快速服务器端编程
- 模版引擎
WebSocket
支持- 频率限制
- 15种语言
限制
- 由于
Fiber
使用了unsafe
特性,导致其可能与最新的Go版本不兼容。Fiber 2.18.0
已经在Go1.14
到1.17
上验证过。 Fiber
与net/http
接口不兼容。这意味着你无法使用gqlen
,go-swagger
或者任何其他属于net/http
生态的项目。
总结
推荐大家使用Fiber
去构建自己的高性能web微服务,尤其是高并发处理大量请求领域优先使用。Fiber
目前已经很成熟了,具体大家可以参考官网:
https://learnku.com/docs/gofiber/2.x/fiber-project-introduction/11720#dc7277。