Общий мост между C ++ и PHP - PullRequest
5 голосов
/ 16 мая 2011

У нас есть веб-приложение (довольно тяжелое), которое выполняет целый набор вещей, веб-интерфейс, математическую обработку и моделирование, а также вещи, связанные с базой данных.

Ряд процессов, которые происходят в PHP, довольно медленный, в основном потому, что PHP отстой для математической обработки.

В будущем мы хотели бы прервать эти медленные процессы и переписать их во что-то более быстрое, возможно, C ++ или, может быть, Java.

Кто-нибудь знает общий способ получения данных в PHP и из него и в среду другого языка? Я уже рассматривал сериализацию вещей в JSON и добавление их в / dev / shm или сокет, а затем прослушивание другого языка в сокете или просмотр расположения в общей памяти и т. Д.

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

Я не уверен в разумном решении, но я рассматривал реализацию Quercus PHP , которая является чистой Java, а также мост PHP / Java.
Тем не менее, я не смог найти ничего для C ++, который бы выполнял похожую функцию. Написание PHP-модуля возможно, но я изо всех сил пытаюсь понять, насколько он может быть достаточно универсальным, а не просто переписать каждый новый (и некоторый старый) скрипт в модуль, а затем вызвать эти функции в PHP.

Ответы [ 5 ]

5 голосов
/ 16 мая 2011

Буферы протокола Google

Буферы протокола

Что это?

Буферы протокола - это способ кодирования структурированных данных в эффективном, но расширяемом формате. Google использует буфер протоколов почти для всех своих внутренних протоколов RPC и форматов файлов.

Он поддерживает быструю и эффективную сериализацию для объектов, которые вы определяете на языке .proto, и поддерживает C ++ / Java изначально, а также PHP с добавлением сторонних разработчиков.

3 голосов
/ 16 мая 2011

Посмотрите на Gearman: http://gearman.org/

Работает с C и PHP, среди кучи других языков. Это явно не заявляет C ++, хотя: (

Помимо работы в качестве моста, он может работать как балансировщик нагрузки и обеспечивать избыточность системы.

Я сам этим не пользовался, но это выглядит довольно круто:)

РЕДАКТИРОВАТЬ: Gearman потребует от вас сериализации данных, так что минус в этом отношении.

2 голосов
/ 16 мая 2011

В настоящее время мы используем Zend Framework для вызова библиотек C ++ в нашем php-коде. Это может быть то, что вы ищете.

Ура!

1 голос
/ 28 июня 2012

Я только что завершил разработку "PHP file object", который является компонентом уровня 10 Vettrasoft Z Справочник. Этот объект позволяет вызывать «предварительную обработку» кода PHP, встроенный в документ, из программы на C ++. Код приложения будет выглядеть что-то как это:

int i;
file_o f_in("mytemplate.txt"), f_out("my_output.txt");
rec_dbag_o bag;
phpfile_o my_php (f_in);

for (i=0; i < 9; i++)
{
    my_php.process(f_out, bag);
    // --do something with 'f_out' (PHP generated output file)--
}

Идея заключается в том, что входной файл ('f_in' в приведенном выше примере) является "шаблоном" файл, содержащий код PHP (или просто прямой файл PHP). Сгенерированный вывод идет в 'f_out' [выше]. Как правило, это было бы в цикле. Данные из пакета данных ('bag', выше) предоставляется процессору PHP (пакеты данных являются альтернативой Vettrasoft в XML) и, следовательно, переносит данные из вашего приложения C ++ в код PHP.

В отличие от некоторых из упомянутых альтернатив, вы просто связываете свою программу с Z Directory библиотеки. Тем не менее, он требует собственного PHP 'CLI' [интерфейс командной строки] процессор (программа "SAPI") на том же компьютере (если вы можете сделать "http://localhost/somfile.php", вы вероятно, настроен PHP).

На самом деле это последнее дополнение к Z Directory, которое на момент написания этой статьи (27 июня 2012 г.) еще не был выпущен, и мы назвали его "C ++ / PHP bridge". Прошло альфа только сегодня и будет включен в следующий выпуск (ZP9 / b13) - примерно в середине июля. Друг указал на это пост в stackoverflow.com, это было ошеломляющим для меня, чтобы прочитать это, так как время так случайна.

1 голос
/ 16 мая 2011

Я недавно наткнулся на оптимизатор Hiphop.Facebook использует это, это может быть именно то, что вам нужно, хотя я не могу говорить по опыту.https://github.com/facebook/hiphop-php/wiki/

Проверьте, подходит ли вам это:)

...