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