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