Simple package that fixes the known Fiber / FastHTTP issue with context closure on connection closure.
TL;DR FastHTTP doesn't close context when connection is closed.
More on this issue here: valyala/fasthttp#965 (comment)
Install fiberclose.
go get -u github.com/mymmrac/fibercloseUse it for the Fiber app.
- Use middleware:
app.Use(fiberclose.Middleware())- Always use
fiber.Ctx.Context():
ctx := fCtx.Context()- Use listener wrapper:
app.Listener(fiberclose.Listener(ln))Full example:
package main
import (
"fmt"
"net"
"github.com/gofiber/fiber/v3"
"github.com/mymmrac/fiberclose"
)
func main() {
app := fiber.New()
// Use fiberclose middleware
app.Use(fiberclose.Middleware())
app.Get("/", func(fCtx fiber.Ctx) error {
// Always use user context
ctx := fCtx.Context()
fmt.Println("Connection open")
<-ctx.Done()
fmt.Println("Connection closed")
return nil
})
ln, err := net.Listen("tcp", ":8080")
if err != nil {
// ...
}
// Use fiberclose listener wrapper
if err = app.Listener(fiberclose.Listener(ln)); err != nil {
// ...
}
}