Skip to content

服务器配置

fun 基于 fasthttp,暴露了生产必需的几组配置:监听、超时、并发、请求体上限与优雅关停。所有配置必须在 Start 之前调用(之后调用会 panic:mustNotStarted)。

监听与关停

go
func (f *Fun) Start(port uint16)             // 监听 :port
func (f *Fun) StartOn(addr string)           // 监听完整地址,如 "127.0.0.1:8080"、unix socket
func (f *Fun) Shutdown(ctx context.Context) error // 优雅关停:等待在途请求完成或 ctx 超时
go
f := fun.GetFun()
// ... BindService / BindGuard / BindRoute / CORS ...

go func() {
    if err := f.Start(8080); err != nil {
        log.Fatal(err)
    }
}()

// 优雅退出
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit

ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
if err := f.Shutdown(ctx); err != nil {
    log.Printf("shutdown: %v", err)
}

超时

go
func (f *Fun) SetTimeouts(read, write, idle time.Duration)

对应 fasthttp 的读 / 写 / 空闲超时。长连接流式场景注意 idle 需大于流式心跳间隔(25s),否则空闲流会被服务端断开:

go
f.SetTimeouts(10*time.Second, 10*time.Second, 120*time.Second)

客户端侧框架不设超时

fun 的 TS 客户端自身不设任何请求 / 连接 / 空闲超时定时器,超时由调用方(AbortSignal.timeout)或网关决定,框架只负责把失败归一为 result。见 TS 客户端 · 超时与取消

并发

go
func (f *Fun) SetMaxConcurrency(n int) // 最大并发请求数,默认 0 = fasthttp 默认(256Ki * CPU 核数相关)

保护服务不被打爆,配合网关限流使用。

请求体上限

go
func (f *Fun) SetBodyLimit(n int) // 字节;默认 fasthttp 4MB
  • 大体积 multipart 上传(文件直传走自定义路由)前放宽;
  • 0 或负数恢复 fasthttp 默认 4MB。

配置速查

API默认说明
Start(port) / StartOn(addr)监听;Start 阻塞,通常放 goroutine
Shutdown(ctx)优雅关停
SetTimeouts(read, write, idle)fasthttp 默认流式场景注意 idle > 25s
SetMaxConcurrency(n)0(fasthttp 默认)最大并发
SetBodyLimit(n)4MB请求体上限
CORS(origins...)未启用CORS 白名单
BindService / BindGuard / BindRoute均须在 Start 前完成

错误行为

请求响应
/cell 且无匹配自定义路由404
/cell 但非 POST405
请求体超上限连接层拒绝

基于 MIT 许可发布