наиболее эффективный межпроцессный вызов между демоном PHP и C

У меня есть REST API, поддерживаемый PHP, который вызывает программу C. В зависимости от входных данных программа C возвращает данные JSON, а PHP считывает выходные данные и напрямую отправляет их обратно клиенту.

Код по существу:

$command = $binary . " " . $parameters;
$output = shell_exec($command);
echo $output;

При каждом вызове API PHP запускает программу, выполняет некоторую обработку и завершает работу.

Я хотел бы сделать это более эффективным, запустив программу C как демон, а затем вызывая PHP-сервер в этот демон.

Кроме того, я мог бы перейти на веб-фреймворк Python, поэтому мне нужно что-то кроссплатформенное со стороны клиента.

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


person steve8918    schedule 17.04.2012    source источник
comment
Недавно я использовал Gearman, и он сделает это без проблем. Хотя в первую очередь это очередь, вы также можете запустить блокировку рабочих процессов, если хотите подождать в PHP, пока что-то не будет сделано. Я считаю, что воркеры могут быть написаны на большинстве языков - пока я снова использую PHP, я думаю, что C не будет проблемой.   -  person halfer    schedule 18.04.2012
comment
Кросс-платформенный, кросс-языковый, распределенный, быстрый, удобный: zeromq.org/intro:read- руководство   -  person hakre    schedule 18.04.2012


Ответы (1)


Трудно ответить на этот вопрос, не зная больше о вашей программе на C.

Одна вещь, которую определенно стоит проверить, — это создание расширения PHP.

Это не кросс-платформа, но вы можете написать аналогичные расширения для Python или Ruby, а часть расширения — это всего лишь небольшой скелет вокруг вашей программы на C, и его действительно легко написать.

person Karoly Horvath    schedule 17.04.2012
comment
Спасибо, моя программа на самом деле просто небольшая программа на C, которая возвращает строки на основе пользовательского ввода. Так что это еще не очень сложно. Я, скорее всего, изучу zeromq, возможно, это то, что я ищу. - person steve8918; 18.04.2012
comment
Ссылка для создания расширения PHP (theserverpages.com/php/manual/en/zend .creating.php) с ошибкой 404. - person Peter Krauss; 12.11.2012