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流而不是普通套接字.
谢谢.
找到了解决方案,似乎有一个“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