dotweb——go语言的一个微型web框架(二)启动dotweb
以上的代碼截圖表示啟動一個dotweb服務,在瀏覽器里輸入127.0.0.1:8080,將會得到一個“index”的頁面。
app := dotweb.New()dotweb.New()函數表示創建一個新的dotweb對象,這個對象是dotwebapp。我們把dotweb稱之為web框架,實際上這只是一種叫法。dotweb它是一個application,如果您說它是個web服務器那么這種說法也是對的。dotweb.New()返回的dotweb對象通常我們叫做app,它負責日志、緩存、熱加載、加載httpserver等等工作。它是一個容器、一個宿主,httpserver就是在它的環境里運行。
app.SetLogPath(file.GetCurrentDirectory())dotweb內部實現了日志輸出,你只需要制定一個日志路徑就可以使用。這里只是指定了日志存放路徑,至于如何輸出日志這在后續的文章中會說明,請放心它的使用非常簡單。
app.SetCache(cache.NewRuntimeCache())//使用本地內存當作緩存 app.SetCache(cache.NewRedisCache("redis標準連接字符串"))//使用redis作為緩存dotweb對緩存有兩種支持,一種是本地內存,一種是redis。在New()的時候,dotweb默認是不創建緩存對象的,如果你需要可以自己用SetCache()函數設置。在兩種緩存策略中,你只能選擇一種來使用。如果你設置了兩種,dotweb將使用最后一個SetCache()。你可能對dotweb原生支持redis緩存表示欣喜,在你深入了解后會發現dotweb不只是cache支持redis。這正是出于對現代系統需要分布式部署的考慮。
app.Cache()你可以通過Cache()函數獲取緩存對象,在后續文章中我會介紹操作Cache對象的方法,如果你已經迫不及待想使用它,你可以閱讀源碼,它非常簡單很容易就可以理解。
app.RegisterModule(&dotweb.HttpModule{OnBeginRequest: func(ctx *dotweb.HttpContext) {fmt.Println(ctx.Url())},OnEndRequest: func(ctx*dotweb.HttpContext) {fmt.Println("離開",ctx.Url(),"頁面")},}) app.RegisterModule(&dotweb.HttpModule{OnBeginRequest: func(ctx *dotweb.HttpContext) {if strings.Split(ctx.Url(),"/")[1] == "subject"{fmt.Println(ctx.Session().Get("user"))if ctx.Session().Get("user") == nil {ctx.WriteString("請先登錄.")ctx.End()}}},
OnEndRequest: func(ctx*dotweb.HttpContext) {},})
Module在dotweb中被稱為中間件,RegisterModule函數接受一個HttpModule類型的參數,HttpModule有兩個參數為*dotweb.HttpContext函數定義—OnBeginRequest和OnEndRequest,它們分別表示在UserHandler執行前執行和在UserHandler執行后執行。dotweb接受多個Module,它會按照注冊順序來執行,在一些權限驗證和日志處理中它非常有用。上述代碼第一個Module打印了請求的路由,第二個Module表示在subject的子路由下需要用戶登錄。有人表示希望能把Module綁定到UserHandler上以方便開發,這條建議我們認為很有用,我們會在以后的版本中增強Module的功能。
?
app.SetEnabledListDir(true)SetEnabledListDir用來設置是否允許目錄瀏覽,默認是false。如果你的服務器上沒有任何靜態資源給客戶端訪問,那么就可以不用配置。關閉目錄瀏覽通常在數據接口服務器上非常有用。
app.SetEnabledDebug(true)SetEnabledDebug用來設置是否啟動調試模式,在調試模式下如果出現異常dotweb將返回相關的錯誤信息,方便追查問題。這在開發和測試環境中非常有用,默認值是false,所以在生產環境中你可以不用配置該值。
app.SetEnabledSession(true)SetEnavledSession用來設置是否啟用session,你可能會感到疑惑為什么dotweb默認不啟用session呢?因為維持session會帶來性能損耗,在某些項目中不需要session,如果啟用可能會帶來不必要的性能損失。如果你需要你只需設置一下就好,就像示例一樣讓它為true。
app.SetSessionConfig(session.NewDefaultRuntimeConfig())//使用本地內存 app.SetSessionConfig(session.NewDefaultRedisConfig("redis標準連接字符串"))//使用redisdotweb的session也是有兩種存儲策略,一種是本地的內存,一種是redis。這點和緩存
app.SetEnabledGzip(true)SetEnabledGzip用來設置是否啟用Gzip壓縮,當然默認還是false。事實上Gzip不一定會帶來性能的提升,因為對Response的緩沖區進行壓縮會造成一些性能損耗,所以對于是否啟用Gzip壓縮你需要考慮到項目的實際情況。
?
app.SetExceptionHandle(func(ctx *dotweb.HttpContext,errinfo interface{}){//ctx表示請求上下文,errinfo表示錯誤信息fmt.Println(ctx.Url(),"請求出現異常,錯誤信息:",errinfo)})雖然dotweb提供了默認的異常處理模塊,但是大部分情況下它不是你想要的那種方式。所以你可以根據自己的需要添加自己的異常處理模塊,如果你添加了自己的異常處理模塊,那么默認異常處理模塊將會失效。
app.StartPProfServer(8081)PProf服務是用來監控dotweb運行狀態的,它目前提供了一些簡單的查詢。不過我們有計劃在今后版本增強這部分功能,我們歡迎大家的建議。需要注意的是PProf服務端口不能和dotweb主服務端口沖突。
最重要的一步:
app.StartServer(8080)StartServer表示啟動dotweb服務,它會根據配置初始化相關資源并且裝載httpserver。啟動之后,你就可以在瀏覽器里訪問了。
當然dotweb也有讀取配置文件啟動的方法,在一些場景下它非常有用,我會在后續的文章中介紹如何使用配置文件啟動dotweb。當然,如果你已經迫不及待也可以去閱讀源碼,項目地址:https://github.com/devfeel/dotweb,再次聲明:我們歡迎你對提出建議或者直接進行源碼貢獻,你可以通過github項目地址找到我們的QQ群。
總結
以上是生活随笔為你收集整理的dotweb——go语言的一个微型web框架(二)启动dotweb的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bzoj2720 [Violet 5]列
- 下一篇: 快速排序--未看