下面是对 Go 库 github.com/fvbock/endless使用方法整理,适合想要在 Web 服务中实现**优雅重启(graceful restart)**的人阅读。


📦 1. 安装

go get github.com/fvbock/endless

🧠 2. 基本原理(简要说明)

  • endless 是对 net/http 的封装。
  • endless.ListenAndServe() 替代标准库的 http.ListenAndServe()
  • 实现优雅关闭和重启,保持老连接不中断,等待完成后退出。

🧪 3. 示例代码

package main

import (
    "fmt"
    "log"
    "net/http"
    "github.com/fvbock/endless"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, this is an endless server!")
}

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/", handler)

    addr := ":8080"
    log.Printf("Starting server at %s\n", addr)

    // 使用 endless 启动服务器
    err := endless.ListenAndServe(addr, mux)
    if err != nil {
        log.Fatalf("Server error: %v", err)
    }
}

🔄 4. 如何触发优雅重启

支持的信号:

  • SIGHUP:重启(推荐)
  • SIGINT, SIGTERM: 正常退出(优雅)
  • SIGKILL: 强制杀死(非优雅)

使用示例:

# 获取进程 PID
ps aux | grep your_app_name

# 给进程发送 SIGHUP 信号,触发优雅重启
kill -HUP <pid>

🛠️ 5. 常用函数(简要说明)

函数名说明
endless.ListenAndServe()替代标准的 http.ListenAndServe(),支持优雅重启。
endless.ListenAndServeTLS()ListenAndServeTLS() 类似,用于 HTTPS。
endless.NewServer()创建一个自定义的 Server 对象(可选高级用法)。

⚠️ 6. 注意事项

  • 必须用 endless 的方法代替标准库的 ListenAndServe(),否则不会生效。
  • 如果你使用了 http.Server 对象,要用 endless.NewServer() 创建。
  • 日志和信号处理建议你加上,便于调试。

🧪 7. 示例:使用 TLS

err := endless.ListenAndServeTLS(":443", "cert.pem", "key.pem", handler)

✅ 8. 适合场景

  • Web 服务升级(无停机)
  • 微服务部署
  • 支持长连接(WebSocket)

🧾 9. 参考资料


需要我帮你写一个支持优雅重启的生产级 Web 应用模板也可以告诉我。

每日更新-免费小火箭账号
不要错过任何机会,探索最新的应用和游戏,就在我们的平台。
立即访问
最后修改:2025 年 05 月 17 日
如果觉得我的文章对你有用,请随意赞赏