C++ 和 PHP 之间的通用桥梁

Generic bridge between C++ and PHP

本文关键字:PHP 之间 C++      更新时间:2023-10-16

我们有一个Web应用程序(相当重量级的应用程序),它做一大堆东西,Web UI,数学处理和建模,以及与数据库相关的东西。

PHP

中发生的许多过程都非常慢,主要是因为PHP在数学处理方面很糟糕。

将来,我们希望打破这些缓慢的过程,并用更快的速度重写它们,可能是C++,或者可能是Java。

有谁知道一种通用的方法,可以将数据传入和传出PHP并进入另一种语言的环境? 我已经考虑过将内容序列化为 JSON 并将它们铲入/dev/shm 或套接字,然后让其他语言侦听套接字,或查看共享内存位置等。

这种东西对于本机类型来说效果很好,但是当你考虑到很多传递的东西实际上是类实例和类似的对象时,确实很糟糕。

我不确定一个明智的解决方案,但我一直在考虑纯Java的Quercus PHP实现,以及PHP/Java桥。
但是,我一直无法为C++找到任何可以执行类似功能的东西。 编写PHP模块是可能的,但我正在努力了解它如何足够通用,而不仅仅是将每个新(和一些旧)脚本重写为模块,然后在PHP中调用这些函数的情况。

Google 协议缓冲区

协议缓冲区

这是什么?

协议缓冲区是一种以高效且可扩展的格式对结构化数据进行编码的方法。Google 将协议缓冲区用于几乎所有内部 RPC 协议和文件格式。

<尾引号>

它支持对用.proto语言定义的对象进行快速高效的序列化,并支持本机C++/Java,以及带有第三方附加的PHP。

看看 Gearman: http://gearman.org/

它适用于C和PHP,以及其他语言。不过,它没有明确说明C++:(

除了用作网桥之外,它还可以用作负载平衡器并提供系统冗余。

我自己没有用过,但它似乎很棒:)

编辑:Gearman会要求你序列化数据,所以在这方面有一个减号。

我们目前正在使用 zend framework 来调用 php 代码中的C++库。这可能是您正在寻找的。

干杯!

我最近偶然发现了Hiphop优化器。Facebook使用它,它可能正是你所需要的,尽管我不能从经验中说话。https://github.com/facebook/hiphop-php/wiki/

看看它是否适合您的需求:)

我刚刚完成了"PHP 文件对象"的开发,它是一个第 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 目录图书馆。但是,它确实需要本机PHP"CLI"[命令行界面]处理器。("SAPI"程序)在同一台机器上(如果你可以做"http://localhost/somfile.php",你可能已经配置了 PHP)。

这实际上是Z目录的最新成员,截至撰写本文时(2012年6月27日),尚未发布,我们将其称为"C++/PHP 桥"。它今天刚刚通过了阿尔法并将包含在下一个版本 (ZP9/b13) 中 - 大约 7 月中旬。一位朋友指出了这一点在 stackoverflow.com 的帖子中,读到这篇文章让我瞠目结舌,因为时机如此之大巧合。