.so被激活,等待PHP网页调用

build C++ shared library and .so is activated and waiting to be called by PHP webpage

本文关键字:PHP 网页 调用 等待 激活 so      更新时间:2023-10-16

平台:CentOS或linux

我想建立一个c++共享库,它被激活一次,它会像在待机模式,准备被其他应用程序调用。它就像windows中的COM+。我想用两种方式调用c++库。

  1. 在同一台计算机内,并且该进程是在进程中。

  2. (不是必需的,但更可取)共享库可以使用RPC或由局域网内的其他机器调用。例如:DCOM

使用c++构建PHP扩展有点混乱,我希望PHP和c++之间的连接更加"语言/平台独立",但它具有快速的速度(如DCOM)。

有这样的解决方案吗?

我所做的研究:1. SWIG有点接近我所说的,但我不确定它是否可以"备用",我不确定它是否是进程内通信。2. 不,眼镜蛇,我不用java。

更新

我问这个的原因。目前我正在使用PHP, IIS (FastCGI), COM+和c#在windows上,他们都工作得很好。但是慢慢地,由于使用微软产品的成本,我想迁移到Linux。该软件成本很高,而且c#的效率比Linux上的本地c++慢。但是Linux上没有COM+ ....

在Unix系统上,没有共享库这样的东西在内存中保持活动状态,即使使用它的程序都停止了。如果这确实是你想要的,你将不得不开发一个特定的服务器应用程序,它可以"永远"运行,并且客户端程序可以连接并发送指令。

客户端和服务器之间的通信通常通过网络连接进行,而不是在同一进程中。如果不允许设置网络连接,则可以使用共享内存。它减少了必须在客户机和服务器进程之间复制的数据量,但这是一种不常见的解决方案。网络通信(或本地套接字)是客户端和服务器之间非常常用的通信方式。

非常流行的存储数据的应用程序当然是数据库。如果你永远运行的"共享库"的主要目标是集中某种缓存,你也可以使用数据库。

使用SWIG,您确实可以选择用C编程并将C函数导出到PHP。但你是对的,这样的解决方案是不持久的。每次PHP引擎启动时,共享库也会被重新初始化。如果启动了PHP引擎的多个实例,那么也会启动共享库的多个实例——每个实例都有自己的数据空间(尽管使用共享内存可以确保所有这些实例都可以访问相同的数据)。

SWIG的另一种选择是PHP-CPP库。该库还允许您使用c++构建PHP扩展,并且具有比SWIG更强大的表达式功能。但是同样的限制也适用于这里:它不是持久的。

顺便说一下,一旦PHP扩展被加载,它将被用来服务数百甚至数千的页面浏览量扩展卸载之前。这意味着您可以优化扩展以将某些数据保留在内存中。虽然不会永远,但至少会持续很长一段时间。