0

我正在从事一个涉及数据库 (My SQL)、网站 (PHP) 和自定义高性能服务器应用程序 (C++) 的项目。C++ 应用程序(及其附带的客户端应用程序)构成了项目的主要部分,数据库为其存储长期数据。该网站主要用于显示各种统计数据和管理。

1) 我希望 PHP 脚本和 c++ 应用程序能够以某种方式进行通信,因为数据库仅用于持久数据,另外 c++ 应用程序可能会缓存一些东西,因此在某些情况下需要告知重新加载数据. 它们很可能在不同的机器上,甚至可能在不同的操作系统上。我一直在考虑 TCP 可能是一些简单命令的最佳选择 - 响应协议?

2) 编写一次通用数据库接口代码并能够在 PHP 网站和 c++ 应用程序中使用它的最佳方法是什么?

4

8 回答 8

3

1)使用数据库进行通信。C++ 应用程序可以

select * from table where some_last_modified_timestamp > '<last time checked>';

2) 在 PHP 和 C++ 中优先使用存储过程而不是硬编码查询。

于 2009-12-04T23:05:51.677 回答
1

#1:如果你在不同的操作系统上,那么 TCP 听起来是个不错的主意。

#2:听起来你需要一个 C 库,然后从 C++(普通)和 PHP 中调用它。在 Google 上搜索会返回很多关于用 C 编写 PHP 扩展的文章,例如:

http://devzone.zend.com/article/1021

http://www.devarticles.com/c/a/Cplusplus/Developing-Custom-PHP-Extensions-Part-1/

于 2009-12-04T23:09:26.073 回答
1

您可以尝试根本不允许 PHP 访问数据库。使 C++ 应用程序完成所有数据库工作,并使其向 PHP 站点提供数据。您可以将 C++ 应用程序的一部分作为服务器运行,以便 PHP 从中获取报告等。

于 2009-12-04T23:13:32.137 回答
1

1)我还建议使用 TCP。根据请求-响应的复杂性,我可能会选择一些临时文本协议或使用 XML(特别适用于响应或请求是结构化且更复杂的情况)。如果您使用 XML,则无需编写自己的解析器/生成器。您甚至可以尝试使用 XML-RPC,但我还没有这方面的实际经验。

于 2009-12-04T23:36:23.893 回答
1

在 PHP 和 C++ 中使用相同 SQL 的最佳方法是准备语句。

一种很好的沟通方式是让一个人托管另一个连接到的服务器(自定义/soap/rest)。PHP 可以轻松地托管和连接,并且由于该代码是用 C 编写的,因此在 C++ 中也应该很容易。

像 Eric Seppanen 建议的那样编写 PHP 扩展超出了您的项目 ID 的范围和需求。

于 2009-12-04T23:36:33.177 回答
1

使用ThriftProtobufs(可能是Avro)声明通信协议并通过 tcp 套接字使用它。它将解决您的跨语言问题,而无需滚动自定义协议,并且您最终会在两侧得到实际对象(为 c++ 静态类型!)。我已经看到 Thrift 非常成功地像这样使用。

于 2009-12-05T04:10:45.007 回答
0

我的方法是使用 SWIG。我将它与 python 一起使用,但它也支持 PHP。

然后很容易从您的脚本中使用它。

其他解决方案可能是一些 RPC(这将允许将服务器和 PHP 应用程序放在不同的地方)。

于 2009-12-04T23:13:06.780 回答
0

我是这里的初学者,所以如果我的想法非常糟糕,请原谅。

但是为什么我们不能通过 TCP 传输 XML。拥有 C++ TCP 服务器和 PHP TCP 客户端。我认为 PHP 有一个非常强大的套接字 API

于 2009-12-05T04:44:47.953 回答