11

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

<hostname>:<port>:<timeout>

我如何保存(或检查它是否已经创建)连接对象(它是一个 C 结构,而不是 zval 或任何与 PHP 严格相关的东西)?给定它的 id 我以后如何检索它?

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

谢谢。

4

1 回答 1

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

于 2013-07-05T15:45:38.290 回答