我为我编写的服务器应用程序开发了一个PHP5客户端扩展,到目前为止它工作得很好,但它还不支持持久连接。 由于这是我想在发布第一个稳定版本之前实现的,我正在搜索有关持久性的文档,并找到了持久分配例程(pemalloc,pecalloc等)。 我无法理解的是如何在新请求时检索持久分配的对象,我的意思是,让我们说连接的持久ID是:
<hostname>:<port>:<timeout>
如何保存(或检查它是否已经创建)连接对象(这是一个C结构,而不是zval或任何严格与PHP相关的东西)? 我如何才能在以后找到它的ID?
PS:我知道PHP持久流(我已经研究了pfsockopen C源代码),但我使用的是C客户端库,所以我无法直接访问套接字或修改C客户端库以使用php流代替普通插座。感谢。
答案 0 :(得分:4)
找到解决方案,似乎有一个“persistent_list”哈希对象,所以我能够做到:
zend_hash_find(&EG(persistent_list), ...
查找持久数据(显然是用pemalloc分配)和
zend_hash_update(&EG(persistent_list), ...
保存新实例。
(在PostgreSQL php扩展源代码中找到它。)
http://devzone.zend.com/446/extension-writing-part-iii-resources/#Heading8
任何对我的方法感兴趣的人都在https://github.com/evilsocket/phpgibson