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