От PHP.net:
http://www.php.net/manual/en/function.pfsockopen.php
Я понимаю суть того, что выполняет эта функция, но я до сих пор неясно, выполнит ли это то, что мне бы хотелось. Вот мой сценарий:
У меня есть большое приложение PHP, которое используется многими пользователями одновременно. Внутри приложения я открываю TCP-сокет на удаленный сервер для регистрации сообщений и т. Д. Я надеялся, что смогу использовать pfsockopen, чтобы было необходимо открыть гораздо меньше соединений. Например, открывается пользовательский знак in-socket. Пользователь2 подписывается, сокет не открывается, потому что он может «контактировать» с гнездом, открытым пользователем1.
Это возможно?
pfsockopen
действительно сохранит сокет открытым, когда скрипт закончится, позволяя ему повторно использовать запрос от другого, эффективно открывая меньше подключений, как вы ожидали. Однако это несовместимо со всеми SAPI.
Настойчивость возникает на основе каждого процесса . Таким образом, pfsockopen
в CLI. SAPI закроет и снова откроет сокет при каждом выполнении, потому что скрипт CLI выполняется в одном запущенном процессе, открывает сокет и заканчивается (закрывая сокет вместе с процессом).
В режиме CGI с одним процессом для каждого скрипта это также верно.
С Apache SAPI зависит от того, какой тип модуля мультипроцессорности (MPM) используется. mpm-prefork
порождает новый процесс по каждому запросу, поэтому он, скорее всего, его не поддерживает. mpm-worker
однако, порождает потоки, поэтому он, вероятно, будет работать там. mpm-winnt
– это вариант Windows с многопоточным MPM, поэтому он тоже должен работать.
Хуже всего то, что вызов будет выполнен как обычный вызов fsockopen
.