繁体   English   中英

构建C ++共享库,并激活.so并等待被PHP网页调用

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

平台:基于CentOS或Linux

我想构建一个C ++共享库,它将被激活一次,就像在待机模式下一样,可以被其他应用程序调用。 就像Windows中的COM +。 我想用两种方式调用C ++库。

  1. 在同一台计算机上,并且该过程正在进行中。 这样通讯速度很快。

  2. (不是必需的,而是首选)共享库可以使用RPC或局域网内的其他计算机来调用。 例如像DCOM

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

有什么解决办法吗?

我所做的研究:1. SWIG与我所说的有点相似,但是我不确定它是否可以“待机”,也不确定它是否在进行中。 2.没有眼镜蛇,我不使用java。

UPDATE

我问这个的原因。 目前,我在Windows上使用PHP,IIS(FastCGI),COM +和C#,它们运行良好。 但是由于使用Microsoft产品的成本,我希望逐渐迁移到Linux。 该软件成本很高,并且C#的效率比Linux上的本机C ++慢。 但是在Linux上没有像COM +这样的东西。

在Unix系统上,没有一个共享库在内存中保持活动状态,即使使用它的程序都已停止。 如果确实是您要寻找的内容,则必须开发一个可以“永久”运行的特定服务器应用程序,并且客户端程序可以与之连接并发送指令。

客户端和服务器之间的通信通常通过网络连接进行,而不是在同一过程中进行。 如果确实不能进行网络连接,则可以使用共享内存。 它减少了必须在客户端和服务器进程之间复制的数据量-但这是您很少看到的解决方案。 网络通信(或本地套接字)在客户端和服务器之间进行通信非常普遍。

当然,非常流行的用于存储数据的应用程序是数据库。 如果永久运行的“共享库”的主要目标是集中某种缓存,那么您也可以使用数据库。

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

SWIG的替代方法是PHP-CPP库。 该库还允许您使用C ++构建PHP扩展,并且比SWIG具有更多的表达能力。 但是这里有相同的限制:它不是持久的。

顺便说一句,一旦PHP扩展程序被加载,它将在卸载扩展程序之前用于提供数百甚至数千个页面浏览。 这意味着您可以优化扩展名以将某些数据保留在内存中。 不是永远-但至少要持续很长时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM