我们有一个Web应用程序(非常重量级),它可以完成一大堆东西,web ui,数学处理和建模以及与数据库相关的东西。
PHP中发生的一些过程非常缓慢,主要是因为PHP很难进行数学处理。
将来,我们希望打破这些缓慢的过程,并以更快的速度重写它们,可能是C ++,或者Java。
有没有人知道将数据输入和输出PHP以及进入另一种语言环境的通用方法?我已经考虑将事物序列化为JSON并将它们铲入/ dev / shm或套接字,然后让其他语言在套接字上侦听,或者查看共享内存位置等。
这种类型的东西适用于本机类型,但是当您考虑到传递的大量内容实际上是类实例和类似对象时,确实非常困难。
我不确定一个合理的解决方案,但我一直在考虑Quercus PHP实现纯Java,以及PHP/Java bridge.
但是,我一直无法找到可以执行类似功能的C ++。编写PHP模块是可能的,但我很难看到它是如何足够通用的,而不仅仅是将每个新的(和一些旧的)脚本重写到模块中,然后在PHP中调用这些函数。
答案 0 :(得分:5)
协议缓冲区
这是什么?
协议缓冲区是一种以高效且可扩展的格式编码结构化数据的方法。 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上发帖,因为时间紧迫所以让我大吃一惊 巧合。