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