2009-12-04 83 views
0

我正在研究涉及数据库(My SQL),网站(PHP)和自定义高性能服务器应用程序(C++)的项目。 C++应用程序(及其随附的客户端应用程序)构成项目的主要部分,数据库为其存储长期数据。该网站主要用于显示各种统计和管理。跨语言开发问题

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

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

回答

1

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

+0

是否有一种将C++接口公开给PHP的理智方法?或者我需要为此构建一个全功能的TCP协议? – 2009-12-04 23:15:43

+1

你可以使用更简单的东西,如JSON,在现有协议(本例中为HTTP)的基础上构建它。 – danielkza 2009-12-05 04:02:17

3

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

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

2)使用存储过程优先于PHP和C++中的硬编码查询。

+2

是的,不要过时这一点,使用数据库作为IPC。 – Xailor 2009-12-05 00:30:18

0

我的方法是使用痛饮。我使用python,但它也支持PHP。

然后,从脚本中使用它非常容易。

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

+0

我使用swig编写Python扩展,但是swig要解决C++服务器位于不同服务器上的问题,在不同的操作系统上可能使用PHP? – 2009-12-04 23:17:53

+0

直接没有。但是,大多数语言通过网络提供简单的数据交换,而不必经历如何序列化数据的痛苦。因此,整个过程变得更容易。然而,在两台机器上使用php并不是一个非常优雅的解决方案;) – 2009-12-04 23:50:09

1

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

1

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

沟通的一个好方法就是托管一个服务器(自定义/肥皂/休息),另一个连接到。 PHP可以轻松地主机和连接,并且由于该代码是用C语言编写的,所以在C++中也应该很容易。

写一个像Eric Seppanen这样的PHP扩展可能超出了你的项目ID的范围和需求。

1

使用ThriftProtobufs(可能是Avro)来声明通信协议并通过tcp套接字使用它。它将解决您的跨语言问题,而无需推出自定义协议,并最终以双方实际对象(静态类型为C++!)。我已经看过Thrift这样非常成功地使用了。

0

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

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

+0

原始海报没有给出任何关于通信的细节,例如哪个启动通信,通信有多复杂,或者PHP是否能够连接到C++服务器,反之亦然。 – wallyk 2009-12-05 06:20:54

+0

我想我被误解了,但原来的海报正在考虑使用TCP。 – anijhaw 2009-12-14 07:37:08