C#基於websocket-sharp實現簡易httpserver(封裝)


一、背景

  其實就是很簡單的,公司會桌面開發的人員緊缺啊,項目又趕,而我們公司的前端人員人多還厲害(ps:吐槽下,后端的人真的少啊,會桌面開發的更少啊),所以萌生出了使用html+js來構建本地應用程序,但是我們的客戶基本都是制造行業,需要對很多硬件進行交互(IO卡、PLC、串口等等各種),那就勢必還是需要傳統的應用程序(畢竟方案多),emmm,那這兩者之間需要怎么樣結合呢?so就有了本文,讓winform變成一個httpserver,這樣就可以接入各種硬件以及處理耗時動作,將界面跟業務處理分開,當時這個還是前端人員提出能不能用前端技術構建界面,后面我們一合計,應該是可以試試(ps:大佬們如果有問題請輕拍啊

二、技術點說明

  websocket-sharp

  websocket-sharp是開源的websocket的C#封裝,可以幫助我們快速構建websocket的相關應用,但是同時它也提供了httpserver的功能,這次選型這個的緣故也是因為有websocket的存在,后續擴展做實時的數據交互應該是非常方便的

  其他:

  autofac(IOC使用)、json.net(json序列化使用)

三、關注點

    

  如圖所示,對於一個自動更新程序,關注點應該都是以上幾個點

  • 支持Get以及Post請求,這個應該是基本的(對於其他請求沒有進行封裝)
  • 依賴注入,還是很好用的,最直觀的就是不用寫new對象了
  • 異常filter,可以實現全局異常捕獲以及處理(服務端開發應該用的比較多)
  • 文件獲取,最直觀的就是要顯示圖片咋辦
  • 自定義filter,就是平常我們針對於每個action的攔截器(目前還未實現)

  大致應該就以上幾點,如果實現以上幾點,應該可以算是一個像模像樣的簡陋版httpserver(只支持api訪問的那種)

四、設計流程圖

   

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  一些說明:

  1、為了減少依賴,我將websocket-sharp的源碼全部放入到MHttpServer項目中,感謝websocket-sharp的作者,可以讓我方便的實現httpserver的功能

  2、整體流程就如上所示,應該還是比較順暢,我目前是把自己做服務器端開發時候的一些慣性思路帶到這個項目中,有可能會不符合其他人的開發習慣

  3、其他具體看github的代碼,如果有人想做研究的話

  4、程序考慮支持XP,所以將.net framework的版本定在4.0,所以autofac的版本是比較低的,這個如果需要最新版本可以自己去升級

  5、整體的開發參照目前WebApi的方式進行,路由規則定為controller/action(例如:User/Add),所以是沒有參照restful的標准(實際原因是理解不了Restful怎么應付復雜的http請求場景,例如參數個數類型一樣的情況下??)

五、如何使用

  新建winform項目后,在需要開啟的地方里加入以下代碼:

     MHttpServer.Listen listen = new MHttpServer.Listen(8088);
     ContainerBuilder builder = new ContainerBuilder();
     builder.RegisterType<TestService>().PropertiesAutowired();
     listen.InitController(builder);
     listen.start();

  以上代碼是實例化一個httpserver對象,並且將service注入到buid中,將build傳入到InitController,通過這種方式實現全局的依賴注入

  效果如下:

  正常執行,並且觸發更新winform的界面,TestDo方法是一個事件,事件中將收到的數據顯示在form的richtextbox中

  

  故意觸發異常執行:

  觸發異常執行的時候,如下圖所示,進入了ExceptionFilter中,並且將處理過的異常返回到前端

  

六、總結

  這次的實踐只是一個新的嘗試,如果效果比較好的話,后續對於交互要求比較高的程序,應該都會采用這種方案進行,通過NanUI或者electron構建界面,本地開啟httpserver進行硬件的交互以及業務上的數據查詢,充分發揮團隊中每個人的作用

  這個項目中的大部分東西都是第三方開源產品,我只是做了一個封裝,所以最后感謝開源這些產品的作者們

  由於個人原因,在測試上可能會有所不夠,如果有什么bug的話,還請告知,感謝(ps:文字表達弱雞,多多包涵)

  項目地址:https://github.com/Hello-Mango/MHttpServer

作者: Mango

出處: http://www.cnblogs.com/OMango/

關於自己:專注.Net桌面開發以及Web后台開發,開始接觸微服務、docker等互聯網相關(最近被互聯網架構搞的死去活來- -)

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,如有問題, 可站內信告知.

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM