Как лучше всего развернуть веб-приложение, написанное на C? - PullRequest
2 голосов
/ 18 июля 2010

Скажем, у меня есть причудливый новый алгоритм, написанный на C,

int addone(int a) {
    return a + 1;
}

И я хочу развернуть его как веб-приложение, например на

http://example.com/addone?a=5

который отвечает:

Content-Type: text/plain

6

Каков наилучший способ разместить что-то подобное?У меня есть существующая настройка, использующая Python mod_wsgi на Apache2, и для тестирования я только что собрал двоичный файл из C и вызываю как подпроцесс, используя Python os.popen2.

Я хочу, чтобы это было очень быстро и не тратитьнакладные расходы (т.е. мне вообще не нужны эти другие вещи Python).Я могу посвятить ему весь сервер, перекомпилировать все необходимое и т. Д.

Я думаю о поиске модулей Apache C.Это полезно?Или я могу создать оболочки SWIG для вызова напрямую из Python, но опять же это кажется расточительным, если я вообще не использую Python.Любые советы?

Ответы [ 6 ]

3 голосов
/ 18 июля 2010

Самый простой способ - написать эту программу в виде приложения CGI (http://en.wikipedia.org/wiki/.cgi).. Она будет работать с любым веб-сервером, поддерживающим интерфейс Common Gateway. Выходной формат должен соответствовать правилам CGI.

Если вы хотите в полной мере использовать возможности веб-сервера, то вы можете написать модуль Apache на C. Это требует немного больше подготовки, но дает вам полный контроль.

2 голосов
/ 18 июля 2010

Может быть этот крошечный динамический веб-сервер на C для использования с языком C может помочь вам ... он должен быть простым в использовании и автономным.

Возможно, самое быстрое решение, которое вы можетепринять в соответствии с критериями, указанными на их домашней странице!

1 голос
/ 18 июля 2010

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

from ctypes import *
libcompute = CDLL("libcompute.so")
libcompute.addone(int(a))
0 голосов
/ 06 августа 2013

Вы можете попробовать ввод / вывод Duda, для этого требуется только хост Linux: http://duda.io

0 голосов
/ 29 июля 2013

Я только что настроил веб-сервис, используя libmicrohttpd , и получил потрясающие результаты. На четырехъядерном ядре я обрабатываю 20400 запросов в секунду, а процессор работает только на 58%. Это, вероятно, будет развернуто на сервере с 8 ядрами, поэтому я ожидаю гораздо лучших результатов. Очень простой сервис C будет еще быстрее!

Я пробовал GWAN, он очень хороший, но он закрыт и плохо работает с виртуальными средами. Я дам @ Gil слава, будучи хорошим в поддержке этого здесь, хотя. У нас просто было несколько проблем, и мы обнаружили, что LibMicroHttpd лучше работает для наших нужд.

Если вы идете сюда, вам может потребоваться обновить ваш openssl, если вы используете CentOs с axivo

rpm -ivh --nosignature http://rpm.axivo.com/redhat/axivo-release-6-1.noarch.rpm
yum --disablerepo=* --enablerepo=axivo update openssl-devel
0 голосов
/ 19 июля 2010

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

Наличиеваш сервер алгоритмов на основе C, отделенный от сервера HTTP, может предоставить вам доступ к таким вещам, как масштабируемость HTTP и средства кэширования, которые в противном случае могли бы быть встроены (или заново изобретены) в компоненте алгоритма, если вещи слишком тесно связаны.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...