提示
我使用的服务器框架是 iris,其他服务器框架可以按照原理类推。
废话少说,直接进入正题。Go 是编译型语言,所以用一个主程序来热加载服务器的想法基本不可行。
热重启标志
想要热重启,我们先得让程序知道自己是人工启动的还是因热重启被启动的。在程序入口中加入一个 flag
然后传递给启动服务器的函数
其中 os.NewFile(3, "")
中的 3 是下文启动新进程时赋予的文件编号
热重启信号
在服务器上,我们可以通过发送信号给进程来实现命令下达,我们只需要在程序中监听 SIGUSR1
或 SIGUSR2
就能实现热重启命令的下达。
现在就可以通过 kill
命令传递信号来实现热重启了
参考资料