我正在玩一些C代码,编写一个小型的Web服务器。我正在做的目的是使用不同的网络技术编写服务器,以便我可以了解更多关于它们的信息(多线程与多进程对比选择vs轮询)。大部分代码保持不变,但我希望网络代码能够“换出”以针对不同的技术进行一些性能测试。我想过使用ifdef但似乎很快就会让代码变得丑陋。有什么建议吗?
答案 0 :(得分:3)
动态库加载?例如Linux中的dlopen
。
只需为需要动态加载的组件创建一个通用的API。
答案 1 :(得分:2)
我更喜欢将“条件编译”从C / C ++源推送到makefile,即从多个.c / .cpp文件生成相同的符号,但只在构建选项选择的对象中链接。
如果你还没有看过nginx,可以看一下 - 可能会给你一些关于web服务器实现的想法。
答案 2 :(得分:1)
使用灵活的界面将网络部件编译到自己的lib中。根据需要将lib编译到各种包装器中。您甚至可以找到符合您要求的预先存在的库。
答案 3 :(得分:1)
将网络相关功能的不同实现放入不同的.c文件中,这些文件共享一个公共标题,而不是与您要使用的标题链接。从这开始,你可以让你的makefile以这种方式为你所做的每个不同的实现创建不同的可执行文件,所以你可以说“make httpd_select”或“make httpd_poll”等。
特别是对于找到最佳方法的基准测试,它可能会在编译器/链接器级别为您提供比通过共享库或函数指针更可靠的结果,因为这可能会在运行时引入额外的开销。