C Напряжение объекта PHP Extension
Я разработал клиентское расширение PHP5 для серверного приложения, которое я написал, и пока он работает довольно хорошо, но пока не поддерживает постоянные соединения.
Поскольку это то, что я хочу реализовать перед выпуском первой стабильной версии, я искал документацию о стойкости и нашел постоянные процедуры распределения (pemalloc, pecalloc и т.д.).
Я не могу понять, как получить постоянный выделенный объект по новым запросам, я имею в виду, допустим, что постоянный идентификатор соединения:
<hostname>:<port>:<timeout>
Как сохранить (или проверить, был ли он уже создан) объект соединения (который является структурой C, а не zval или что-то строго связанное с PHP)?
Как я могу получить его позже, указав его id?
PS: Я знаю о постоянных потоках PHP (я изучил источники pfsockopen C), но я использую клиентскую библиотеку C, поэтому я не могу напрямую обращаться к соке или изменять клиентскую библиотеку C для использования 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