一個網友問我:他有幾百個客戶端并發訪問的請求,想選擇boost::asio的現成異步通訊框架,感覺怎么樣。
對C++開發人員來說,很多人應該不止一次面對這個問題,甚至是工作了七八年的人。
我發現一個現象:當一個C++開發人員,面對一個服務器開發需求時,常常不自覺去想尋找一個高效的網絡通訊庫,而且考慮的比其它方面更早。
效率,是C/C++開發人員引以自傲的一個方面,即便嘴里不說,潛意識里會有這個想法。
這一潛意識讓他們在面對服務器開發時,會不自覺去想要得到一個最好的網絡通訊框架,不管是否存在,是否有必要。
你現在面對的這個實際需求,是否真的需要一個你心里想要的那個高效的網絡通訊框架?
你的業務流程是什么?動手在紙上畫一畫,再復雜用UML圖設計一下,難道除了網絡通訊,就沒有其它方面更耗時?更值得關注?
真正的平均客戶端連接并發是多少?頻率有多高?
你準備投入多少臺服務器,每臺服務器的CPU速度、內存大小、磁盤轉速和采用什么陣列、網卡是100M還是真1000M、網絡上交換機和路由器是怎么部署的,客戶端和服務器之間通訊的距離是有什么特點,等等?
你們有多少開發人員和測試人員,這個項目客戶給你多長時間完成,你準備什么質量程度給他交貨?
我們把思路收回來,就考慮網絡通訊框架:
業務模型到底適合采用TCP還是UDP?采用長連接還是短連接?采用異步還是同步?采用阻塞還是非阻塞?
是手工寫個簡單的好,還是采用現成的網絡通訊框架?
采用現成的網絡通訊框架: 選擇boost::asio?選擇ACE?選擇MFC自帶的異步類?。。。。。。
你熟悉這些框架嗎?他們有多大?你是不是這次只用到那1/1000之一的部分?為了這個小功能,你到底愿意搞那么一個龐然大物嗎?
最后,你這個子系統,一定要用C/C++來實現最合適嗎?你還會其它開發語言嗎?
從各個方面多問問自己,然后自己試著回答,說不定我們先前的疑問就不存在了。