System¶
服务端简单MVC的实现,实现了Handler接口
system实现了http.Handler接口,提供ServeHTTP方法,这里面就是http-server处理流程的实现。 http-server的处理流程
Dispatch流程说明¶
BeforeAction¶
这里用于处理每个Action中的公共逻辑部分,在Action前执行,如生成logId、登录验证等。
示例:
func (this *BaseController) BeforeAction(context gcontroller.ActionContext) {
acontext := context.(*ApiContext)
realIp := acontext.RemoteRealAddr.Ip
sl, e := glog.NewSimpleLogger(log.UserLogWriter, glog.LEVEL_INFO, glog.NewWebFormater(acontext.Rid, []byte(realIp)))
if e != nil {
acontext.UserLogger = new(glog.NoopLogger)
} else {
acontext.UserLogger = glog.NewAsyncLogger(sl, log.UserLogRoutineCh) //创建本次请求的userLogger对象
}
acontext.RespWriter.Header().Add("X-Powered-By", "gohttp")
}
AfterAction¶
示例:
func (this *BaseController) AfterAction(context gcontroller.ActionContext) {
acontext := context.(*ApiContext)
acontext.RespBody = misc.ApiJson(acontext.ApiData.Data, acontext.ApiData.Err) //统一Api输出
}
处理对应请求的Action逻辑中的公共逻辑部分,在Action后执行,如Api接口通常会按照固定接口格式统一发送数据等。
Destruct阶段说明¶
这里销毁请求中逻辑中创建的一些临时变量,防止内存溢出,如每个请求的logger等。
示例:
func (this *BaseController) Destruct(context gcontroller.ActionContext) {
acontext := context.(*ApiContext)
acontext.UserLogger.Free() //销毁本次请求的userLogger对象
}
JumpOutAction使用¶
这个方法用于跳出Dispatch流程,直接进入Destruct阶段,如Redirect请求等。 func Redirect302(url string)
就是一个典型的应用实现。
func Redirect302(url string) {
JumpOutAction(redirect302, url)
}