为什么要热重启

小步快跑的项目开发, 或者项目下游有很多全天侯高流量服务请求接口。
开发总是要频繁发布线上代码。 总不能每次发布都要半夜3点吧。 半夜3点还有一堆脚本呢。

所以服务需要热重启,不管什么时间点都能发布代码。

php的线上发版

php因为是运行时加载,所以不存在热重启一说。 如果有开启opcache, 可以选择性清除opcache或者等待opcache自动更新。
php随时发版依赖于ln软链接 或者 rsync文件同步工具。

因为不存在常注进程, 每个request请求都是一个新的线程,拉取最新的文件运行,所以,php项目不需要热重启就可以实现随时发布代码

golang的线上发版

golang是常注进程,必须要实现热重启。 需要借助组件:endless,graceful等工具。

现实原理:
开启进程B,
设置进程B 共享使用进程A的socket
进程A取消指定端口socket的监听,不再提供服务。
进程A退出。

实现

deploy 代码: