5

我们有一个 Web 应用程序(相当重量级的应用程序),它包含一整套东西、Web 用户界面、数学处理和建模,以及与数据库相关的东西。

PHP 中发生的许多过程非常缓慢,主要是因为 PHP 不适合数学处理。

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

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

这种东西对于原生类型来说工作得很好,但是当你考虑到很多被传递的东西实际上是类实例和类似的对象时,它确实很糟糕。

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

4

5 回答 5

5

谷歌协议缓冲区

协议缓冲区

它是什么?

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

<结束报价>

它支持您在语言中定义的对象的快速高效的序列化.proto,并且原生支持 C++/Java,以及带有 3rd 方插件的 PHP。

于 2011-05-16T13:49:01.483 回答
3

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

它适用于 C 和 PHP,以及大量其他语言。虽然它没有明确说明 C++ :(

除了充当桥梁外,它还可以充当负载平衡器并提供系统冗余。

我自己没用过,但看起来很棒:)

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

于 2011-05-16T13:46:28.007 回答
2

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

干杯!

于 2011-05-16T13:47:33.917 回答
1

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

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

于 2011-05-16T15:46:20.093 回答
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”[上图]。通常这将是一个循环。数据包(上面的“包”)中的数据被提供给 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 上指出了这篇文章,因为时间如此巧合,我读到这篇文章让我大吃一惊。

于 2012-06-28T02:55:52.007 回答