2011-05-16 67 views
4

我们有一个web应用程序(相当重的一个),它执行一整套东西,web ui,数学处理和建模以及数据库相关的东西。C++和PHP之间的通用桥梁

在PHP中发生的一些进程非常缓慢,主要是因为PHP吸收数学处理。未来,我们希望打破这些缓慢的过程,并以更快的速度重写它们,可能是C++或Java。

有谁知道通用的方式来获取数据进出PHP和进入另一种语言的环境?我已经考虑将事情序列化成JSON并将它们铲入/ dev/shm或套接字,然后让另一种语言在套接字上侦听,或者查看共享内存位置等。

这种事情适用于本地类型,但是当你认为许多被传递的东西实际上是类实例和类似的对象时,它确实很难实现。

我不知道一个明智的解决方案,但我一直在考虑Quercus PHP实现这是纯Java的,还有PHP/Java bridge.
不过,我一直无法找到C++,会做一个什么类似的功能。编写一个PHP模块是一种可能性,但我很努力地看到它是如何足够通用的,而不仅仅是将每个新的(和一些旧的)脚本重写入模块,然后在PHP中调用这些函数。

回答

4

Google protocol buffers

Protocol Buffers的

这是什么?

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

<endquote>

它支持您在.proto语言定义对象快速,高效的系列化,并支持C++/Java的原生和PHP与第三方添加上。

3

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

它与C和PHP,除其他语言的堆。它没有明确说明C++虽然:(

除了作为一个桥梁的工作,它可以作为一个负载平衡器合作,使系统冗余。

我没有用它自己,但似乎相当真棒:)

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

2

我们正在使用zend框架在我们的php代码中调用C++库。这可能是你在找什么。

干杯!

1

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

看它是否适合你的需要:)

+0

它不适用于我们的应用程序。之前尝试过。它禁止所有的命名空间,并且如此巧妙地打破其他一些东西。 – 2011-05-16 16:39:36

1

我刚刚完成了“PHP文件对象”,这是Vettrasoftž目录的层10组件 的发展。该对象允许从C++程序中调用嵌入在文档中的PHP代码“012处理”, 。应用程序代码看起来 这样的:

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',above)中的数据提供给PHP处理器(数据库是Vettrasoft替代XML的 ),因此将数据从您的C++应用程序传输到PHP代码。

与上述替代方案不同,您只需将程序链接到Z目录 库。但是,它确实需要在同一台机器上使用本地PHP'CLI'[命令行界面]处理器 (“SAPI”程序)(如果可以执行“http://localhost/somfile.php”,则可能需要 配置PHP)。

这实际上是Z目录中的最新成员,截至撰写本文时(2012年6月27日), 尚未发布,我们称之为“C++/PHP桥”。它仅在今天通过了阿尔法 ,并将包括在下一个版本(ZP9/b13)中 - 大约在七月中旬。一位朋友在stackoverflow.com上指出了这个 的帖子,这让我大跌眼镜,因为时间是如此 巧合。