最近一直在看關於thrift的相關文章,涉及到的內容的基本都是表層的。一旦具體要用到實際的項目中的時候就會遇到各種問題了!
比如說:thrift 的服務器端載體的選擇、中間代碼的生成options(async asyncctp wcf 等等)、實現服務器端和客戶端的基礎框架的選擇、和承載各層之間的組合的ioc架構。
其實這些東西,內容還是蠻多的。可能大家在看了這篇文章對很多必須要對 thrift 的基礎做些普及才能看懂,還有就是windowsservices、wcf、spring.net!
這裡,我是用的C# 做服務器和客戶,當然,服務器端公布出的接口客戶端就不在乎你是什麼語言的了。只需要thrift的編譯器生成對應中間代碼然後相應編寫代碼就ok了。
下面是我選擇的代碼結構:
服務器端的載體我選擇了windows services ,編譯器肯定是用官方最新的thrift0.9.2(在代碼生成的時候options我選擇了wcf), 至於Thrift 的基礎框架,我選擇的是.net的 Thrift 和Thrift.Server和Thrift.Client (客戶端可以支持多個服務器端的配置這正式我要找的東西呀),Ioc框架,其實現成的注入框架比較多,什麼autoface,unity,spring.net等等;其實最終我們選擇這些依賴注入的目的一定要清楚:(個人觀點) 讓我們的架構更松散、代碼更美觀、代碼量更少、高可復用性、更容易維護。其實無論的的選擇是什麼,目的清楚了你的選擇就一目了然了。這裡我的選擇肯定就是spring.net了,因為它有對Wcf,webservice,windowsservice,remoting等 的專門支持Spring.Services。另外的原因就太多了,讓我省去了不少代碼,讓原本臃腫Wcf的代碼變得結構清晰,另外它也統一了所有項目的依賴注入。
其中thrift 的代碼生成命令是:thrift -gen csharp:wcf *.thrift
現在還看不到spring 的內容,應該它的作用是將松散的代碼最後組合成一個成品。所以會涉及很多的spring配置。而且最終只會在ServerHost 項目的app.config 中可以看到。
當然裡面的代碼相當的少,因為spring.services裡面做了整合,且一次封裝,ServerHost 裡面的代碼就不用改了,你 唯一要做的就是如何將各個模塊用配置整合在一起了。
從現在的結構視乎看上去很簡單,其實不然,要真正將它們整合在一起要做很多配置和調試工作
下面看看生成的dll文件就知道了:
這還只是dll文件,相信用過spring的都知道。spring在代碼和結構上帶來了福音,但是配置文件的編寫和整個框架的調試和融通卻是一件頭痛的事情。
不過,隨著.net 的開源,對項目架構和可擴展性,分布式,可維護性要求也在慢慢體現出來。
所以做.net 的同學們,不要只看到.net的敏捷開發,要看到它有更宏偉的目標(分布式,雲層存儲,搜索引擎等等);而要達成這樣的目標,我們必須重視各種第三方開發的中間件,不管它的原型是java開發的,php開發的,還是其他語言開發的。最重要的是它能帶來我們想要的,它能讓我們程序不在難以維護,讓系統像一個嬰兒一樣可以逐步成長,而不是其他語言所取代,或是各種重復開發。