天天看點

dotweb——go語言的一個微型web架構(二)啟動dotweb

dotweb——go語言的一個微型web架構(二)啟動dotweb

以上的代碼截圖表示啟動一個dotweb服務,在浏覽器裡輸入127.0.0.1:8080,将會得到一個“index”的頁面。

dotweb.New()函數表示建立一個新的dotweb對象,這個對象是dotwebapp。我們把dotweb稱之為web架構,實際上這隻是一種叫法。dotweb它是一個application,如果您說它是個web伺服器那麼這種說法也是對的。dotweb.New()傳回的dotweb對象通常我們叫做app,它負責日志、緩存、熱加載、加載httpserver等等工作。它是一個容器、一個宿主,httpserver就是在它的環境裡運作。

dotweb内部實作了日志輸出,你隻需要制定一個日志路徑就可以使用。這裡隻是指定了日志存放路徑,至于如何輸出日志這在後續的文章中會說明,請放心它的使用非常簡單。

dotweb對緩存有兩種支援,一種是本地記憶體,一種是redis。在New()的時候,dotweb預設是不建立緩存對象的,如果你需要可以自己用SetCache()函數設定。在兩種緩存政策中,你隻能選擇一種來使用。如果你設定了兩種,dotweb将使用最後一個SetCache()。你可能對dotweb原生支援redis緩存表示欣喜,在你深入了解後會發現dotweb不隻是cache支援redis。這正是出于對現代系統需要分布式部署的考慮。

你可以通過Cache()函數擷取緩存對象,在後續文章中我會介紹操作Cache對象的方法,如果你已經迫不及待想使用它,你可以閱讀源碼,它非常簡單很容易就可以了解。

<a></a>

Module在dotweb中被稱為中間件,RegisterModule函數接受一個HttpModule類型的參數,HttpModule有兩個參數為*dotweb.HttpContext函數定義—OnBeginRequest和OnEndRequest,它們分别表示在UserHandler執行前執行和在UserHandler執行後執行。dotweb接受多個Module,它會按照注冊順序來執行,在一些權限驗證和日志進行中它非常有用。上述代碼第一個Module列印了請求的路由,第二個Module表示在subject的子路由下需要使用者登入。有人表示希望能把Module綁定到UserHandler上以友善開發,這條建議我們認為很有用,我們會在以後的版本中增強Module的功能。

SetEnabledListDir用來設定是否允許目錄浏覽,預設是false。如果你的伺服器上沒有任何靜态資源給用戶端通路,那麼就可以不用配置。關閉目錄浏覽通常在資料接口伺服器上非常有用。

SetEnabledDebug用來設定是否啟動調試模式,在調試模式下如果出現異常dotweb将傳回相關的錯誤資訊,友善追查問題。這在開發和測試環境中非常有用,預設值是false,是以在生産環境中你可以不用配置該值。

SetEnavledSession用來設定是否啟用session,你可能會感到疑惑為什麼dotweb預設不啟用session呢?因為維持session會帶來性能損耗,在某些項目中不需要session,如果啟用可能會帶來不必要的性能損失。如果你需要你隻需設定一下就好,就像示例一樣讓它為true。

dotweb的session也是有兩種存儲政策,一種是本地的記憶體,一種是redis。這點和緩存

SetEnabledGzip用來設定是否啟用Gzip壓縮,當然預設還是false。事實上Gzip不一定會帶來性能的提升,因為對Response的緩沖區進行壓縮會造成一些性能損耗,是以對于是否啟用Gzip壓縮你需要考慮到項目的實際情況。

雖然dotweb提供了預設的異常處理子產品,但是大部分情況下它不是你想要的那種方式。是以你可以根據自己的需要添加自己的異常處理子產品,如果你添加了自己的異常處理子產品,那麼預設異常處理子產品将會失效。

PProf服務是用來監控dotweb運作狀态的,它目前提供了一些簡單的查詢。不過我們有計劃在今後版本增強這部分功能,我們歡迎大家的建議。需要注意的是PProf服務端口不能和dotweb主服務端口沖突。

最重要的一步:

StartServer表示啟動dotweb服務,它會根據配置初始化相關資源并且裝載httpserver。啟動之後,你就可以在浏覽器裡通路了。

當然dotweb也有讀取配置檔案啟動的方法,在一些場景下它非常有用,我會在後續的文章中介紹如何使用配置檔案啟動dotweb。當然,如果你已經迫不及待也可以去閱讀源碼,項目位址:https://github.com/devfeel/dotweb,再次聲明:我們歡迎你對提出建議或者直接進行源碼貢獻,你可以通過github項目位址找到我們的QQ群。

繼續閱讀