Работа с похожим кодом в нескольких C "проектах"

Я играю с некоторым кодом C, пишу небольшой веб-сервер. Цель того, что я делаю, состоит в том, чтобы написать сервер, используя различные сетевые методы, чтобы я мог узнать о них больше (многопоточность против многопроцессорности против выбора против опроса). Большая часть кода остается прежней, но я бы хотел, чтобы сетевой код можно было "заменить", чтобы провести тестирование производительности с использованием различных методов. Я думал об использовании ifdefs, но похоже, что это быстро испортит код. Какие-либо предложения?

4 ответа

Динамическая загрузка библиотеки? например dlopen в линуксе

Просто создайте API, общий для компонента, который требует динамической загрузки.

Я предпочитаю помещать "условную компиляцию" из исходного кода C/C++ в make-файлы, то есть иметь одинаковые символы, созданные из нескольких файлов.c /.cpp, но ссылаться только на объекты, выбранные опцией сборки.

Также взгляните на nginx, если вы еще этого не сделали - может дать вам некоторые идеи о реализации веб-сервера.

Поместите различные реализации функций, связанных с сетью, в разные файлы.c, имеющие общий заголовок и связывающие с тем, который вы хотите использовать. Начиная с этого, вы можете сделать так, чтобы ваш make-файл создавал x разных исполняемых файлов для каждой из различных реализаций, которые вы сделали, поэтому вы можете просто сказать "make httpd_select" или "make httpd_poll" и т. Д.

Особенно для сравнительного анализа, чтобы найти лучший подход, он, вероятно, даст вам более надежные результаты, чтобы сделать это на уровне компилятора / компоновщика, чем через общие библиотеки или указатели функций, поскольку это может привести к дополнительным издержкам во время выполнения.

Скомпилируйте сетевую часть в свою собственную библиотеку с гибким интерфейсом. Скомпилируйте эту библиотеку по мере необходимости в различные оболочки. Возможно, вы даже сможете найти уже существующую библиотеку, которая соответствует вашим требованиям.

Другие вопросы по тегам