天天看點

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

dotweb是16年正式托管到github的一個開源項目,go語言的web架構目前也有很多,出名的有bee和echo。它們都是很優秀的架構,但是我們喜歡更輕、更小的東西,經曆一些之後我們更青睐微服務這個設計理念。

  dotweb是一個國人寫的開源項目,據我所知它已經在多家公司的生産項目中使用,到目前為止它和早些年的web架構比顯得很年輕,目前它還在以一種很快速的疊代速度完善。我們計劃會在2017年推出1.0版本,那時候dotweb可以滿足各種場景下的功能需求。我們在完善dotweb的過程中,輕巧是我們的原則,我們不是要做一個大而全的web架構(因為現在已經有這種架構了)我們要做的是一個小而精的架構,它會對擴充很友好,開發速度高效,性能良好。

  dotweb的githun位址是:https://github.com/devfeel/dotweb,我們歡迎您提出建議或者貢獻代碼,我們也歡迎您加入官方QQ群,群号可以在github上找到。

  dotweb和springmvc或者asp.net一樣嗎?它們是有不同的,springmvc和asp.net都是非常優秀的web架構,它們功能強大、性能良好、有着很高的開發效率,但是除此之外dotweb還有一個很迷人的特性——自宿主。有些朋友可能會疑惑什麼叫做自宿主?如果您了解asp.net core您應該知道asp.net core可以脫離iis啟動,iis作為一個web伺服器它就是web程式的宿主,自宿主就是可以脫離傳統web伺服器自己啟動運作。是以說dotweb既是一個web架構又是一個web伺服器,自宿主也不可能脫離web伺服器,隻不過它脫離了傳統的web伺服器在内部內建了一個微型的web伺服器。

  oh,my god!它不使用傳統web伺服器,它性能會不會很差?我如何相信它的性能呢?事實上您不需要對性能太擔心,go語言本身性能就很高,dotweb是用原生的go語言實作,dotweb性能就算不讓人驚豔也不會差。在已上線的項目中,dotweb表現很令人滿意,它在高并發的場景中占用的伺服器資源卻很少,這和go語言的特性是密不可分的。在今後的版本疊代中,性能是我們最關注的事情,我們會不遺餘力的優化性能。

  dotweb還有一個優點就是它很簡單,如果您懂得go語言,那麼讀懂dotweb的源碼是件很容易的事情。我們追求的就是精簡,我們不會為了炫耀一些技巧就把代碼寫得不那麼易懂,我們隻會用最簡潔的代碼,您随時可以根據自己的需求修改dotweb的源碼,這完全是可以的,dotweb不是一成不變的。

  dotweb天生對分布式友好,你會發現它的session支援redis存儲,未來版本支援基于cookie存儲的session實作,更别說cache這類本身就需要分離的子產品了。是以對未來業務擴充或是叢集架設,dotweb都有着很好的支援。

  dotweb對長連接配接和websocket也有着很好的支援,實測單機百萬長連接配接。

  dotweb内置了一個監控服務,通過它您可以查詢dotweb的運作狀态,這個服務我們計劃在以後的時間裡增強功能,友善使用者掌握dotweb的狀态。

  更多的dotweb特性您可以登入github的dotweb項目位址檢視,位址已經在上方貼出。您也可以加入官方QQ群咨詢關于dotweb問題,我們會提供答疑。本篇文章将是dotweb系列文章第一篇,在接下來的文章中我會給大家詳細介紹dotweb使用方法。重申以便,我們歡迎您對dotweb提出建議或者貢獻代碼,并且我們也感謝您提出建議或貢獻源碼,dotweb是一個開源、免費的項目,我們希望它能給您帶來便利。

  思來想去還是寫個hello,world吧,仿佛不寫就不像是程式設計技術部落格一樣。

  第一步:您可以執行go get -u github.com/devfeel/dotweb 指令安裝dotweb。

  第二步:在您的go源檔案中添加import "github.com/devfeel/dotweb"引用。

  第三步:

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

func main(){
   dotapp := dotweb.New()
   dotapp.SetLogPath("/home/logs/wwwroot/")
   dotapp.HttpServer.Router().Get("/index",func(ctx *dotweb.HttpContext){
      ctx.WriteString("Hello,World!")
   })
   dotapp.StartServer(8080)
}      
dotweb——go語言的一個微型web架構(一)

部落格園竟然不支援GO語言代碼塊,囧,在以後的文章我會使用截圖,不過幸好js的風格可以僞裝下Go語言代碼塊。

繼續閱讀