多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[概述] server.go是dotweb的web服务类,它提供了web服务对象的操作、管理。 [常量] ~~~ const ( DefaultGzipLevel = 9 // gzipScheme = "gzip" DefaultIndexPage = "index.html" ) ~~~ [type] ~~~ type ( //HttpServer定义 HttpServer struct { stdServer *http.Server router Router //路由 Modules []*HttpModule //处理模块 DotApp *DotWeb //dotweb对象 sessionManager *session.SessionManager lock_session *sync.RWMutex //用户session的线程安全 pool *pool binder Binder //用于把http请求参数初始化成go类型对象 render Renderer //用于模板处理 offline bool //用于判断offline是否启动 Features *feature.Feature //跨域处理 } //pool定义 pool struct { request sync.Pool response sync.Pool context sync.Pool } ) ~~~ pool类型定义了三个分别表示请求文、返回文、上下文的属性,它们虽然是sync.Pool类型用于保证线程安全,但是它们是可以转换成request、response、context对象,具体怎么操作,请阅读dotweb源码。 [func NewHttpServer()] ~~~ hs := dotweb.NewHttpServer() ~~~ 初始化并返回一个HttpServer对象。 [func (server *HttpServer) ServerConfig] ~~~ hs := dotweb.NewHttpServer() sc := hs.ServerConfig() ~~~ 获取server的config对象,对应配置文件中的server节点。 [func (server *HttpServer) SessionConfig] ~~~ hs := dotweb.NewHttpServer() sc := hs.SessionConfig() ~~~ 获取session的config对象,关于config相关内容请参考[dotweb-config-json](https://github.com/devfeel/dotweb-example/blob/master/config/dotweb.json.conf)。 [func (server *HttpServer) ListenAndServe] ~~~ hs := dotweb.NewHttpServer() hs.ListenAndServe(8080) ~~~ ListenAndServe侦听TCP网络地址srv.Addr,然后调用Serve处理传入连接的请求。 [func (server *HttpServer) ListenAndServeTLS] ~~~ hs := dotweb.NewHttpServer() certFile, keyFile := "...", "..." //证书文件地址 hs.ListenAndServerTLS(8080, certFile, keyFile) ~~~ 启动TLS监听,同ListenAndServer相似,只是加了TLS。 [func (server *HttpServer) ServeHTTP] ~~~ 无示例代码 ~~~ 你不需要关心ServerHTTP,它不会被显式调用。 [func (server *HttpServer) IsOffline] ~~~ hs := dotweb.NewHttpServer() hs.IsOffline() ~~~ 判断服务是否是离线服务。 [func (server *HttpServer) SetOffline] ~~~ ~~~ [func (server *HttpServer) IndexPage] ~~~ hs := dotweb.NewHttpServer() name := hs.IndexPage() ~~~ 获取起始页的名称,该函数名有误导嫌疑,所以后期会调整函数名。 [func (server *HttpServer) SetSessionConfig] ~~~ hs := dotweb.NewHttpServer() sc:=&session.StoreConfig{Maxlifetime:有效期,StoreName:Session模式,ServerIP:地址} hs.SetSession(sc) ~~~ 设置Session配置,Session模式是指session存在哪里。dotweb默认提供了runtime和redis两种模式,更多点击[dotweb-Session](https://github.com/devfeel/dotweb/blob/master/session/session.go) [func (server *HttpServer) InitSessionManager] ~~~ hs := dotweb.NewHttpServer() hs.InitSessionManger() ~~~ 初始化SessionManager,SessionManager用来管理dotweb-Session。详细见Session文档。 [func (server *HttpServer) GetSessionManager] ~~~ hs := dotweb.NewHttpServer() sm := hs.GetSessionManager() ~~~ 获取SessionManager,如果为初始化则初始化,若dotweb配置禁用Session则返回nil。 [func (server *HttpServer) Router] ~~~ hs := dotweb.NewHttpServer() r := hs.Router() ~~~ 获取路由对象,用于管理所有路由。 [关于一系列路由注册函数] 这部分内容将在Router文档中体现,在server文件中的路由注册函数本质上也是调用Router对象的函数。(仿佛有人说我懒╮(╯▽╰)╭) [func (server *HttpServer) Group] ~~~ hs := dotweb.NewHttpServer() g := hs.Group("nunu") ~~~ 组对象用来管理路由。 [func (server *HttpServer) Binder] ~~~ hs := dotweb.NewHttpServer() b := hs.Binder() ~~~ 获取Binder对象,Binder用于初始化http请求参数。 [func (server *HttpServer) Renderer] ~~~ hs := dotweb.NewHttpServer() r := hs.Renderer() ~~~ 获取Renderer对象,它用于模板操作,我不建议在dotweb中使用html模板功能,Renderer只是为了非前后端分离设计。如果未设置Renderer则使用dotweb默认处理函数。 [func (server *HttpServer) SetRenderer] ~~~ hs := dotweb.NewHttpServer() r := new(Renderer) hs.SetRenderer(r) ~~~ 设置Renderer对象,它接受一个实现Renderer接口的结构体。 [func (server *HttpServer) SetEnabledAutoHEAD] ~~~ hs.SetEnabledAutoHEAD(true) ~~~ 设置是否自动启用Head路由,若设置该项,则会为除Websocket\HEAD外所有路由方式默认添加HEAD路由,默认为false。 [func (server *HttpServer) SetEnabledListDir] ~~~ hs.SetEnabledListDir(true) ~~~ 设置是否允许目录浏览,默认为false。 [func (server *HttpServer) SetEnabledSession] ~~~ hs.SetEnabledSession(true) ~~~ 设置是否启用Session,默认为false。 [func (server *HttpServer) SetEnabledGzip] ~~~ hs.SetEnabledGzip(true) ~~~ 设置是否启用gzip,默认为false。 [func (server *HttpServer) SetEnabledIgnoreFavicon] ~~~ hs.SetEnabledIgnoreFavicon(true) ~~~ 设置是否启用Favicon,默认为false。如果启用请在根目录下放置favicon.ico文件,如果修改路径请修改源码或者覆盖dotweb默认Module。 [func (server *HttpServer) SetEnabledTLS] ~~~ hs.SetEnabledTLS(true, "certFile路径", "keyFile路径") ~~~ 设置是否启用TLS,默认为false。如果启用需要传入证书文件路径。 [func (server *HttpServer) SetEnabledDetailRequestData] ~~~ hs.SetEnabledDetailRequestData(true) ~~~ 设置是否启用详细请求数据统计,默认为false。 [func (server *HttpServer) RegisterModule] ~~~ m := new(HttpModule) hs.RegisterModule(m) ~~~ 注册处理模块,上面SetEnabledIgnoreFavicon提到的Module就是使用此函数注册Module,详见[dotweb-Module](https://github.com/devfeel/dotweb/blob/master/module.go)