C PHP扩展对象持久性

C PHP扩展对象持久性,php,c,php-internals,Php,C,Php Internals,我已经为自己编写的服务器应用程序开发了一个PHP5客户端扩展,到目前为止,它工作得很好,但它还不支持持久连接。 因为这是我在发布第一个稳定版本之前想要实现的东西,所以我搜索了关于持久性的文档,找到了持久性分配例程(pemaloc、pecaloc等)。 我不明白的是如何在新请求时检索持久分配的对象,我的意思是,假设连接的持久id是: <hostname>:<port>:<timeout> :: 如何保存(或检查是否已经创建)连接对象(它是C结构,不是zval

我已经为自己编写的服务器应用程序开发了一个PHP5客户端扩展,到目前为止,它工作得很好,但它还不支持持久连接。 因为这是我在发布第一个稳定版本之前想要实现的东西,所以我搜索了关于持久性的文档,找到了持久性分配例程(pemaloc、pecaloc等)。 我不明白的是如何在新请求时检索持久分配的对象,我的意思是,假设连接的持久id是:

<hostname>:<port>:<timeout>
::
如何保存(或检查是否已经创建)连接对象(它是C结构,不是zval或任何严格与PHP相关的东西)? 鉴于它的id,我以后如何检索它

PS:我知道PHP持久流(我研究过PFsockOpenC源代码),但我使用C客户端库,因此无法直接访问套接字或修改C客户端库以使用PHP流而不是普通套接字


谢谢。

找到了解决方案,似乎有一个“持久列表”散列对象,所以我可以:

zend_hash_find(&EG(persistent_list), ...
查找持久性数据(显然使用Pemaloc进行allocd),以及

保存新实例

(可在PostgreSQL php扩展源代码中找到。)


任何对我的方法感兴趣的人,在这里

持久连接至少被认为是无状态web服务器设计的问题。你为什么要实施这个?如果可能的话,我会尝试创建一个连接池,并尝试重新初始化和重用现有的连接池。这也是一个好主意,但无论如何我都需要持久性,所以问题仍然是:)无论如何,有趣的问题:)我担心我在这方面帮不了你更多的忙,因为你似乎已经像我一样对此了解得更多了。但是我添加了一个fav,我很好奇答案会是什么样子。你给了我一个好主意!一旦我弄明白如何设置/获取持久性对象,我就会把它看作是对标准单持久性连接的一种可能的优化。。。所以,谢谢^^为什么不窃取会话或描述符的概念?作为后端进程启动持久连接,并传递不透明描述符以跟踪持久连接?
zend_hash_update(&EG(persistent_list), ...