C PHP расширение объекта Persistence


Я разработал клиентское расширение PHP5 для серверного приложения, которое я написал, и до сих пор оно работает довольно хорошо, но пока не поддерживает постоянные соединения. Поскольку это то, что я хочу реализовать до выпуска первой стабильной версии, я искал документацию о Persistence и нашел постоянные процедуры выделения ( pemalloc, pecalloc и т. д. ). Чего я не могу понять, так это как получить постоянно выделяемый объект при новых запросах, я имею в виду, скажем, что постоянный идентификатор соединения:

<hostname>:<port>:<timeout>

Как сохранить (или проверить, был ли он уже создан ) объект connection (который является структурой C, а не zval или чем-то строго связанным с PHP ) ? Как я могу получить его позже, учитывая его идентификатор ?

PS: Я знаю о постоянных потоках PHP ( я изучал источники pfsockopen C), но я использую клиентскую библиотеку C, поэтому я не могу получить прямой доступ к сокету или изменить клиентскую библиотеку C, чтобы использовать потоки php вместо простых разъемы.

Спасибо.

1 11
php

1 ответ:

Нашел решение, кажется, есть хеш-объект "persistent_list", поэтому я могу сделать:

zend_hash_find(&EG(persistent_list), ...

, чтобы найти постоянные данные (allocd с pemalloc очевидно), и

zend_hash_update(&EG(persistent_list), ...

Для сохранения новых экземпляров.

(нашел это в исходном коде расширения php PostgreSQL. )

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

Все, кого интересует мой подход, это здесь https://github.com/evilsocket/phpgibson