自行实现高性能MVC
wcf雖然功能多、擴展性強但是也面臨配置忒多,而且restful的功能相當怪異,并且目前沒法移植。asp.net core雖然支持webapi,但是功能也相對繁多、配置復雜。就沒有一個能讓碼農們安安心心的寫webapi,無需考慮性能、配置、甚至根據問題場景自行設計、改造等問題的方案么?
當然不是,特別是在dnc2.0已經相當強大的此時,完全可以自行設計一套簡潔、高效的webapi框架!說到自行寫一套框架,很多碼農們就可能會想到開發工作量難以想像,事實真的如此么?java因為開源眾多,很多對mvc稍有了解的都可以拿這個拿那個拼出一個自已的mvc框架;而面對日益強大的dnc,本人覺得C#根本無需東拼西湊這么麻煩,完全可以根據自已的需求簡單快速的寫出一個來,不服就開干!
設計的編碼思路就是仿asp.net mvc,原因就是asp.net mvc成功發展了這么多年,有著大量的C#碼農習慣了這套優良的編碼方式;至于spring mvc、spring boot那些,站在使用者的角度來說,光配置和注解都能敲死人,如要要說簡潔快速,asp.net mvc比他強多了,更別提ruby on rails。不扯遠了,下面就按C#經典來。那么需要考慮的問題有tcp、http、request、response、server、controller、actionresult、routetable等,下面就一一來解決這個問題。
一、Tcp:這個是實現傳輸通信的底層,當然采用IOCP來提高吞吐量和性能,本人之前在做Redis Client等的時候就使用這個IOCP Socket的框架,此時正好也可以用上
二、Http:這個是個應用協議,本人了解下來至少有3個版本,完全熟悉的話估計沒個半年都搞不定;但是只需要關鍵,比如說http1.1的工作模式、傳輸格式、常見異常code、常見mime類型、js跨域支持等,這些基本能覆蓋絕大部分日常場景,至于更多的那些細枝末節的理它作甚,本人的做法就是用Chrome的開發人員工具來查看相關network詳情,這樣的話就可以清楚http這個協議的具體編碼解碼了。
經過分析后http的內容格式其實就是字符回車分隔,再加上一些約定生成的分隔符bound完成的。
看到上面,有人肯定會說你這個傳文件咋辦?一個呢本人這個是針對webapi;另外一個,如真有這個場景,可以用Chrome的開發人員工具來查看相關network詳情,也可以使用httpanalyzerstd、httpwatch等眾多工具分析下,其實也就是使用了一些約定的分隔符bound完成,每個瀏覽器還不一樣,有興趣的完全可以自行擴展一個。
三、Reponse這個是webapi服務端相當重要的一個組件,本人也是盡可能方便并且按盡量按asp.net mvc的命名來實現,另外這里加入支持js跨域所需大部分場景heads,如果還有特殊的heads,完全可以自已添加。
四、HttpServer:這個就是承載webapi的容器;有人說不是有IIS和Apache么?本人想說的是:有self-host方便么?有無需安裝,無需配置、隨便高性能開跑好么?asp.net core里面都有了這個,沒這個就沒有逼格....(此處省略一萬字),前面還研究tcp、http這個當然不能少了
? 五、Controller:為了實現類似于mvc的效果Controller這個大名鼎鼎的當然不能少了,其在C#中使用非常少量的代碼即可實現
六、ActionResult:是mvc里面針對reponse結果進行了一個http格式的封裝,本人主要實現了ContentResult、JsonResult、FileResult三個,至于其他的在WebAPI里基本上用不到。
七、RouteTable:MVC里面有一個相當重要的概念叫約定優先,即為Controller、Action的名稱是按某種規則來寫編碼的,其中將URL與自定義Controller對應起來的緩存映射就是RouteTable,并且作為緩存,也能極大的提升訪問性能。當然這里并沒有嚴格按照asp.net mvc里面的routetable來設計,而是根據只是實現webapi,并使用緩存反射結構能來實現的,并且只有約定,沒有配置。
在MVC的思想里面ActionFilterAtrribute的這個AOP設計也一直伴隨左右,比如記日志、黑名單、權限、驗證、限流等等功能,所以路由的時候也會緩存這個。至此一些關鍵性的地方都已經弄的差不多了,為了更好的了解上面說的這些,下面是vs2017中項目的結構截圖:
純粹干凈單碼,無任何晦澀內容,如果對mvc有一定了解的,這個差不多可以NoNotes,接下來就是按asp.net mvc命名方式,寫個測試webapi看看情況,首先還是測試項目結構圖:
HomeController里面按asp.net mvc的習慣來編寫代碼:
? ? ? ? ? ?
response.Write("<h3>測試一下那個response對象使用情況!</h3>參考消息網4月12日報道外媒稱,法國一架“幻影-2000”戰機意外地對本國一家工廠投下了...");
program.cs Main中啟動一下服務:
mvcApplication.Start();
最后F5跑起來看看效果:
使用Apache ab.exe壓測一下性能如何:
至此,一個簡潔、高效的WebApi就初步完成了!
轉載請標明本文來源:http://www.cnblogs.com/yswenli/p/8858669.html
更多內容歡迎star作者的github:https://github.com/yswenli/SAEA
原文鏈接:https://www.cnblogs.com/yswenli/p/8858669.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
總結
以上是生活随笔為你收集整理的自行实现高性能MVC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET手撸2048小游戏
- 下一篇: 技术管理者怎样跳出“泥潭”