socket通訊是使用第三方庫還是手工封裝操作系統(tǒng)api?
我相信做過幾年的服務器程序開發(fā),你不止一次和網(wǎng)絡通訊、數(shù)據(jù)庫、文件系統(tǒng)打交道。閉上眼睛,靜靜回憶一下你開發(fā)的那些C++服務器系統(tǒng),是不是大多數(shù)都涉及四個部分:
業(yè)務邏輯模塊、網(wǎng)絡通訊模塊、數(shù)據(jù)庫訪問模塊、文件訪問模塊。
單談網(wǎng)絡通訊模塊,我們可能既手工封裝操作系統(tǒng)api,又使用第三方庫。
在unix/linux系統(tǒng)上,直接調用socket()系列。
在windows上,直接調用winsock2提供的API。
使用MFC開發(fā)的,可能直接使用MFC提供的那個框架。
使用了boost庫的,可能喜歡使用那個異步io庫。
還有著名的ACE庫,以及類似的跨平臺庫。
......
使用什么來實現(xiàn)都沒錯,主要是我們最好把握好一個度:
你的項目你的系統(tǒng)是什么規(guī)模,最好就采用什么規(guī)模的實現(xiàn)方式。
技術人員總有一種傾向,新學了一種知識,總是想使用一下,不管它合適不合適,有沒有害處。
我曾經(jīng)看到一段簡單的代碼,就是一個線程實現(xiàn),沒有什么數(shù)據(jù)同步、數(shù)據(jù)通訊等等,可這個線程是用ACE庫里的線程類來實現(xiàn)的,整個程序就四五個小小行數(shù)的cpp文件,為了一個線程,就引進一個大大ACE,而ACE僅僅在我那臺linux開發(fā)機上編譯出一個庫就花大半個上午,發(fā)布的時候還要帶上個so庫文件,這么簡單的功能直接使用pthread庫,linux常常都自帶了,完全沒有必要引入這么大的庫。
設計原則上講,形式追隨功能。
我們用什么形式去實現(xiàn)功能,是功能決定的,至于你能否把握這個原則,那要看你知識的廣度、開發(fā)經(jīng)驗等。
雙節(jié)棍在李小龍手里很厲害,你也像他那樣快速舞動一下,我看馬上就頭上腫起來了。也不是說我們就不能練雙節(jié)棍了,你立志成為武術好手, 雙節(jié)棍高手,那你要下很多功夫,當然就功到自然成了。
可以說,作為個人最好在技術上廣而精,逐步擴大自己知識面;商業(yè)項目開發(fā)時,則最好形式追隨功能,也要看參與者現(xiàn)有的知識結構。
我的理解有限,大家多回復一下自己的看法,回復一下曾經(jīng)開發(fā)通訊模塊時都采用什么。