[概述]
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)