11

私が書いたサーバー アプリケーション用の PHP5 クライアント エクステンションを開発しました。これは最初の安定バージョンをリリースする前に実装したいものなので、永続性に関するドキュメントを検索していて、永続的な割り当てルーチン (pemalloc、pecalloc など) を見つけました。私が理解できないのは、新しいリクエストで永続的に割り当てられたオブジェクトを取得する方法です。つまり、接続の永続的な ID は次のとおりです。

<hostname>:<port>:<timeout>

接続オブジェクト (zval や PHP に厳密に関連するものではなく、C 構造体) を保存する (または既に作成されているかどうかを確認する) にはどうすればよいですか? id を指定して後で取得するにはどうすればよいですか?

PS: PHP 永続ストリームについては知っています (pfsockopen C ソースを調べました) が、C クライアント ライブラリを使用しているため、ソケットに直接アクセスしたり、C クライアント ライブラリを変更してプレーン ソケットの代わりに php ストリームを使用したりすることはできません。

ありがとう。

4

1 に答える 1

4

解決策が見つかりました。「persistent_list」ハッシュオブジェクトがあるようですので、次のことができます。

zend_hash_find(&EG(persistent_list), ...

永続的なデータを見つける (明らかに pemalloc を使用した allocd )、および

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 に答える