# 热升级是什么?
热升级是什么呢?了解 nginx 的同学都知道,nginx 是支持热升级的,可以用老进程服务先前链接的链接,使用新进程服务新的链接,即在不停止服务的情况下完成系统的升级与运行参数修改。那么热升级和热编译是不同的概念,热编译是通过监控文件的变化重新编译,然后重启进程,例如 `bee run` 就是这样的工具
# 热升级有必要吗?
很多人认为 HTTP 的应用有必要支持热升级吗?那么我可以很负责的说非常有必要,不中断服务始终是我们所追求的目标,虽然很多人说可能服务器会坏掉等等,这个是属于高可用的设计范畴,不要搞混了,这个是可预知的问题,所以我们需要避免这样的升级带来的用户不可用。你还在为以前升级搞到凌晨升级而烦恼嘛?那么现在就赶紧拥抱热升级吧。
# grace 模块
grace 模块是 beego 新增的一个独立支持热重启的模块。主要的思路来源于: http://grisha.org/blog/2014/06/03/graceful-restart-in-golang/
# 如何使用热升级
```
import(
"log"
"net/http"
"os"
"strconv"
"github.com/astaxie/beego/grace"
)
func handler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("WORLD!"))
w.Write([]byte("ospid:" + strconv.Itoa(os.Getpid())))
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/hello", handler)
err := grace.ListenAndServe("localhost:8080", mux)
if err != nil {
log.Println(err)
}
log.Println("Server on 8080 stopped")
os.Exit(0)
}
```
打开两个终端
一个终端输入:`ps -ef|grep 应用名`
一个终端输入请求:`curl "http://127.0.0.1:8080/hello"`
热升级
kill -HUP 进程 ID
打开一个终端输入请求:`curl "http://127.0.0.1:8080/hello?sleep=0"`
- beego简介
- 为 beego 贡献
- 发布版本
- 升级指南
- beego安装升级
- Bee 工具的使用
- 快速入门
- 新建项目
- 路由设置
- Controller 运行机制
- model 逻辑
- view 编写
- 静态文件处理
- beego 的 MVC 架构介绍
- controller 设计
- 参数配置
- 路由设置
- 控制器函数
- XSRF 过滤
- 请求数据处理
- session 控制
- 过滤器
- flash 数据
- URL构建
- 多种格式数据输出
- 表单数据验证
- 错误处理
- 日志处理
- model设计
- 概述
- ORM 使用
- CRUD 操作
- 高级查询
- 原生 SQL 查询
- 构造查询
- 事务处理
- 模型定义
- 命令模式
- 测试用例
- 自定义字段
- FAQ
- view 设计
- 模板语法指南
- 模板处理
- 模板函数
- 静态文件处理
- 模板分页处理
- beego 的模块设计
- session 模块
- grace 模块
- cache 模块
- logs 模块
- httplib 模块
- context 模块
- toolbox 模块
- config 模块
- i18n 模块
- beego 高级编程
- 进程内监控
- API 自动化文档
- 应用部署
- 独立部署
- supervisor 部署
- Nginx 部署
- apache 部署
- beego 第三方库
- 应用例子
- 在线聊天室
- 短域名服务
- Todo 列表
- beego实用库
- 验证码
- 分页
- FAQ