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

5
我们有一个网络应用程序(相当沉重),它可以执行许多任务,包括Web UI、数学处理和建模以及与数据库相关的任务。 PHP 中的许多进程非常缓慢,主要是因为 PHP 在数学处理方面效率较低。在未来,我们希望将这些缓慢的过程分离出来,并用更快的语言进行重写,可能是 C++ 或 Java。 是否有通用的方法可以将数据从 PHP 中传输到另一种语言的环境中?我已经考虑过将其序列化为 JSON 并将其传输到 /dev/shm 或套接字中,然后让其他语言监听套接字或查看共享内存位置等。 这种方法对于本地类型来说效果很好,但是当考虑到许多传递的内容实际上是类实例和类似对象时,就会变得非常困难。

我不确定是否有一个明智的解决方案,但我一直在考虑 Quercus PHP 实现,它是纯 Java 的,以及 PHP/Java bridge。
然而,我无法找到任何可以执行类似功能的 C++ 工具。编写 PHP 模块是一种可能性,但我很难看出它如何足够通用,而不仅仅是将每个新(和一些旧)脚本重写为模块,然后在 PHP 中调用这些函数。

5个回答

5

Google protocol buffers

Protocol Buffers是什么?

Protocol Buffers是一种编码结构化数据的高效且可扩展的格式。Google几乎在其所有内部RPC协议和文件格式中都使用Protocol Buffers。

它支持快速高效地序列化您在.proto语言中定义的对象,并支持C++ / Java本地支持,以及通过第三方插件支持PHP。


3
请看Gearman:http://gearman.org/。它可以与C和PHP等多种语言一起使用,但没有明确说明支持C++。除了作为桥梁的作用外,它还可以作为负载均衡器并提供系统冗余。虽然我自己没有使用过,但它似乎非常棒 :)。注意:Gearman需要对数据进行序列化处理,这是一个缺点。

2
我们目前使用Zend框架在我们的PHP代码中调用C++库。这可能是您正在寻找的内容。 祝好!

1
我刚刚完成了“PHP文件对象”的开发,它是Vettrasoft Z目录的第10层组件。该对象允许从C++程序中调用嵌入在文档中的PHP代码的“预处理”。应用程序代码看起来会像这样:
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桥”。它今天刚通过了alpha测试,并将包含在下一个版本(ZP9/b13)中 - 大约在7月中旬。一位朋友在stackoverflow.com上指出了这篇文章,我读到这篇文章感到非常震惊,因为时间如此巧合。

1

它与我们的应用不兼容。我们以前试过了。它会弹出所有命名空间,并微妙地破坏一些其他东西。 - Tom O'Connor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,