C PHP扩展对象持久性

Sim*_*lli 11 php c php-internals

我为我编写的服务器应用程序开发了一个PHP5客户端扩展,到目前为止它工作得很好,但它还不支持持久连接.由于这是我想在发布第一个稳定版本之前实现的东西,我正在搜索有关持久性的文档,并找到了持久分配例程(pemalloc,pecalloc等).我无法理解的是如何在新请求时检索持久分配的对象,我的意思是,假设连接的持久ID是:

<hostname>:<port>:<timeout>
Run Code Online (Sandbox Code Playgroud)

我如何保存(或检查它是否已经创建)连接对象(这是一个C结构,而不是zval或严格与PHP相关的任何东西)?我怎么能在以后找到它的ID?

PS:我知道PHP持久流(我已经研究了pfsockopen C源代码),但我使用的是C客户端库,所以我无法直接访问套接字或修改C客户端库以使用php流而不是普通套接字.

谢谢.

Sim*_*lli 4

找到了解决方案,似乎有一个“persistent_list”哈希对象,所以我可以这样做:

zend_hash_find(&EG(persistent_list), ...
Run Code Online (Sandbox Code Playgroud)

查找持久数据(显然是使用 pemalloc 分配的),以及

zend_hash_update(&EG(persistent_list), ...
Run Code Online (Sandbox Code Playgroud)

保存新实例。

(在 PostgreSQL php 扩展源代码中找到了这个。)

http://devzone.zend.com/446/extension-writing-part-iii-resources/#Heading8

任何对我的方法感兴趣的人,都在这里https://github.com/evilsocket/phpgibson