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

时间:2011-05-16 13:44:06

标签: java php c++ php-java-bridge

我们有一个Web应用程序(非常重量级),它可以完成一大堆东西,web ui,数学处理和建模以及与数据库相关的东西。

PHP中发生的一些过程非常缓慢,主要是因为PHP很难进行数学处理。

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

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

这种类型的东西适用于本机类型,但是当您考虑到传递的大量内容实际上是类实例和类似对象时,确实非常困难。

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

5 个答案:

答案 0 :(得分:5)

Google protocol buffers

协议缓冲区

这是什么?

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

< endquote>

它支持您使用.proto语言定义的对象的快速高效序列化,并且本机支持C ++ / Java,并且第三方添加PHP。

答案 1 :(得分:3)

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

它适用于C和PHP,是一堆其他语言。它没有显式地陈述C ++ :(

除了作为桥梁工作之外,它还可以作为负载均衡器并提供系统冗余。

我自己没有使用它,但它看起来非常棒!)

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

答案 2 :(得分:2)

我们目前正在使用zend框架在我们的php代码中调用C ++库。这可能就是你要找的东西。

干杯!

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

我刚刚完成了“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桥”。它今天通过alpha版 并将包括在下一个版本(ZP9 / b13) - 大约7月中旬。一位朋友指出了这一点 在stackoverflow.com上发帖,因为时间紧迫所以让我大吃一惊 巧合。