socket通讯是使用第三方库还是手工封装操作系统api?
我相信做过几年的服务器程序开发,你不止一次和网络通讯、数据库、文件系统打交道。闭上眼睛,静静回忆一下你开发的那些C++服务器系统,是不是大多数都涉及四个部分:
业务逻辑模块、网络通讯模块、数据库访问模块、文件访问模块。
单谈网络通讯模块,我们可能既手工封装操作系统api,又使用第三方库。
在unix/linux系统上,直接调用socket()系列。
在windows上,直接调用winsock2提供的API。
使用MFC开发的,可能直接使用MFC提供的那个框架。
使用了boost库的,可能喜欢使用那个异步io库。
还有著名的ACE库,以及类似的跨平台库。
......
使用什么来实现都没错,主要是我们最好把握好一个度:
你的项目你的系统是什么规模,最好就采用什么规模的实现方式。
技术人员总有一种倾向,新学了一种知识,总是想使用一下,不管它合适不合适,有没有害处。
我曾经看到一段简单的代码,就是一个线程实现,没有什么数据同步、数据通讯等等,可这个线程是用ACE库里的线程类来实现的,整个程序就四五个小小行数的cpp文件,为了一个线程,就引进一个大大ACE,而ACE仅仅在我那台linux开发机上编译出一个库就花大半个上午,发布的时候还要带上个so库文件,这么简单的功能直接使用pthread库,linux常常都自带了,完全没有必要引入这么大的库。
设计原则上讲,形式追随功能。
我们用什么形式去实现功能,是功能决定的,至于你能否把握这个原则,那要看你知识的广度、开发经验等。
双节棍在李小龙手里很厉害,你也像他那样快速舞动一下,我看马上就头上肿起来了。也不是说我们就不能练双节棍了,你立志成为武术好手, 双节棍高手,那你要下很多功夫,当然就功到自然成了。
可以说,作为个人最好在技术上广而精,逐步扩大自己知识面;商业项目开发时,则最好形式追随功能,也要看参与者现有的知识结构。
我的理解有限,大家多回复一下自己的看法,回复一下曾经开发通讯模块时都采用什么。