制限を共有する最大量でありますシステムのカーネル設定で定義されているオープンファイル記述子の数。 pfsockopen
がうまく実装されている場合は、1つのソケット接続のみを使用する必要があります。つまり、1つのファイル記述子()を1つだけ使用することを意味します。
これをテストする必要があります。
$fd = pfsockopen('173.194.44.24', 80);
echo $fd;
この意志出力ファイルディスクリプタのID:Resource id #1
オープンは、このページに数回、Webブラウザでとリロード - あなたは同じソケット接続を使用している同じIDを毎回表示されるはずです。あなたはおそらくランダムにn個の異なるIDSの中で最も可能性の高い結果がを巡回します別のフォークプロセスに送信されmod_phpのセットアップ、nは
- のApacheの設定に依存しながら - デフォルトのApacheのprefork MPMでは
MinSpareServers
(< = N pConnections)
MaxSpareServers
(> = N pConnections) MaxRequestsPerChild
(tMaxの)
MaxRequestsPerChild
に達すると、プロセスは終了し、この子の永続的な接続も終了します。
LighttpdやNginxのような他のfastcgi対応Webサーバーでは、PHP-FPMやPHP-cgi + fastcgiと組み合わせて、Webサーバーではなくphpプロセスによって引き起こされるのと同じ動作を期待しています。上述したApacheの設定と並行して
、関連する設定は、(= N pConnections>)
pm.min_spare_servers
(< = N pConnections)
pm.max_spare_servers
PHP-FPMであります
pm.max_requests
(tMax)
のFastCGI
PHP_FCGI_CHILDREN
- 永続的な接続の最大寿命がそれによって処理要求の量で(すべての構成において(= N pConnections)
PHP_FCGI_MAX_REQUESTS
(tMaxの)
プロセス)tMax
、並列永続接続の最大量n pConnections
はAcually Iが第2の制限を言及するのを忘れコマンドライン(PHP-CLI)
# php -a
Interactive shell # in a webserver environment this is the equivalent of one child
php > $fd1 = fsockopen('google.de', 80); # open non-persistent connection
php > echo $fd1 . "\n";
Resource id #1
php > $fd2 = fsockopen('google.de', 80); # open another one
php > echo $fd2 . "\n";
Resource id #2 # new fd, new connection
php > $pd1 = pfsockopen('google.de', 80); # persistent connection
php > echo $pd1 . "\n";
Resource id #3 # first persistent fd
php > $pd2 = pfsockopen('google.de', 80);
php > echo $pd2 . "\n";
Resource id #3 # uses the same connection
php > exit # simulating MaxRequestsPerChild threshold
# php -a
Interactive shell
php > $pd3 = pfsockopen('google.de', 80); # persistent connection, same host
php > echo $pd3 . "\n";
Resource id #1 # resource id reused because all old connections are gone
EDIT
でこれをシミュレート。 接続はサーバー自体でいつでも閉じることができます。 これは、使用しているサーバーの設定とプロトコルによって大きく異なります。
ほとんどのサーバーは、n
秒の無音と、接続時間の合計がx
秒後に接続を閉じます。
pconnect
これを静かに処理しますが、古いものがなくなると新しい接続が開きます。
再びCLIでこれをシミュレート:
# php -a
Interactive shell
php > $pd1 = pfsockopen('127.0.0.1', 80);
php > echo $pd1 . "\n";
Resource id #1
php > $pd1 = pfsockopen('127.0.0.1', 80);
php > echo $pd1 . "\n";
Resource id #1
(restarting my webserver on the another console /etc/init.d/nginx restart)
php > $pd1 = pfsockopen('127.0.0.1', 80);
php > echo $pd1 . "\n";
Resource id #2
あなたは私はあなたが何を想像するのに役立つコード例を提供してもらえますか? –
あなたはあなたの帯域幅/メモリが許す限り多くのものを作成することができますが、私は仮定します... – crush
どうやってスレッド間でソケットを共有していますか? pthreads? – glomad