2011-11-11 7 views
6

PHP - 誰かが私のためにpfsockopen関数を説明できますか? PHP.netから(永続的なソケット)

http://www.php.net/manual/en/function.pfsockopen.php

私はこの機能が実現何の主旨を理解し、私はこれは私がそれを欲しいものを達成するかどうかがまだ不明です。ここに私のシナリオです:

私は、多くのユーザーが同時に使用する大きなPHPアプリケーションを持っています。アプリケーション内では、メッセージなどを記録するためのリモートサーバへのTCPソケットをオープンしています...もっと多くの接続を開くためには、pfsockopenを利用できるようになることが私の希望でした。たとえば、user1サインインインソケットが開きます。 User2がサインインすると、user1によって開かれたソケットに "ピギーバック"することができるので、ソケットは開かれません。

これは可能ですか?

答えて

9

pfsockopen実際には、スクリプトの終了時にソケットを開いたままにして、リクエストから別のソケットに再利用できるようにします。ただし、これはすべてのSAPIと互換性がありません。

持続性は、プロセス単位でで発生します。。したがって、CLIでpfsockopenが実行されたSAPIは、起動、ソケットのオープン、および終了(プロセスとともにソケットを閉じる)の1つのプロセスでCLIスクリプトが実行されるため、実行ごとにソケットを閉じて再オープンします。

スクリプトごとに1つのプロセスを使用するCGIモードの場合も同様です。

Apache SAPIでは、どのタイプのマルチプロセッシングモジュール(MPM)が使用されているかによって異なります。 mpm-preforkはリクエストごとに新しいプロセスを生成するため、サポートしていない可能性があります。しかし、mpm-workerはスレッドを生成するので、おそらくそこで動作します。 mpm-winntは、マルチスレッドMPMのWindows版であるため、動作するはずです。

最悪の場合、コールは通常のfsockopenコールとして実行されます。

+2

pfsockopenはPrefork MPMで動作しますが、各子プロセスは独自の永続ソケットを持ちます。 –

関連する問題