Подтвердить что ты не робот

C Напряжение объекта PHP Extension

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

<hostname>:<port>:<timeout>

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

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

Спасибо.

4b9b3361

Ответ 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