服务器配置
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 但非 POST | 405 |
| 请求体超上限 | 连接层拒绝 |