1

我正在玩一些 C 代码,编写一个小型网络服务器。我所做的目的是使用不同的网络技术编写服务器,以便我可以了解更多关于它们的信息(多线程 vs 多进程 vs 选择 vs 轮询)。大部分代码保持不变,但我希望能够“换出”网络代码以针对不同技术进行一些性能测试。我考虑过使用 ifdefs ,但这似乎会很快使代码变得丑陋。有什么建议么?

4

4 回答 4

3

动态库加载?例如dlopen在 Linux 中。

只需为需要动态加载的组件制作一个通用的 API。

于 2009-12-23T16:12:17.193 回答
2

我更喜欢将“条件编译”从 C/C++ 源推送到 makefile,即具有从多个 .c/.cpp 文件生成的相同符号,但仅链接到构建选项选择的对象中。如果您还没有

,也可以看看nginx - 可能会给您一些关于 Web 服务器实现的想法。

于 2009-12-23T16:19:41.530 回答
1

将网络相关功能的不同实现放入共享一个公共头文件的不同 .c 文件中,然后与您要使用的文件链接。从这里开始,你可以让你的makefile为你所做的每个不同的实现创建x个不同的可执行文件,所以你可以说“make httpd_select”或“make httpd_poll”等。

特别是对于找到最佳方法的基准测试,它可能会在编译器/链接器级别为您提供更可靠的结果,而不是通过共享库或函数指针,因为这可能会在运行时引入额外的开销。

于 2009-12-23T16:34:38.543 回答
1

使用灵活的接口将网络部分编译到自己的库中。根据需要将该库编译到各种包装器中。您甚至可以找到满足您要求的预先存在的库。

于 2009-12-23T16:12:32.670 回答