PHP - Может кто-нибудь объяснить мне функцию pfsockopen?(постоянный сокет) - PullRequest
6 голосов
/ 11 ноября 2011

От PHP.net:

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

Я понимаю суть того, что выполняет эта функция, но мне все еще неясно, достигнет ли это того, чего я хотел быэто к.Вот мой сценарий:

У меня есть большое приложение PHP, которое используется многими пользователями одновременно.Внутри приложения я открываю TCP-сокет для удаленного сервера для регистрации сообщений и т. Д. Я надеялся, что смогу использовать pfsockopen для того, чтобы понадобилось открывать гораздо меньше соединений.Например, user1 входит в - открывается сокет.Пользователь 2 входит в систему, сокет не открыт, потому что он может "вставить" сокет, открытый пользователем 1.

Возможно ли это?

1 Ответ

11 голосов
/ 12 ноября 2011

pfsockopen действительно будет держать сокет открытым, когда скрипт завершится, что позволит повторно использовать его из запроса к другому, эффективно открывая меньше соединений, чем вы ожидаете. Однако это не совместимо со всеми SAPI.

Постоянство происходит для каждого процесса . Таким образом, pfsockopen, запущенный в CLI, SAPI будет закрывать и заново открывать сокет при каждом выполнении, потому что скрипт CLI выполняется в одном процессе, который запускается, открывает сокет и заканчивается (закрывая сокет вместе с процессом) .

В режиме CGI с одним процессом на скрипт это также верно.

При использовании Apache SAPI зависит, какой тип модуля многопроцессорной обработки (MPM) используется. mpm-prefork порождает новый процесс при каждом запросе, поэтому он, скорее всего, не поддерживает его. mpm-worker однако порождает потоки, так что, вероятно, он будет работать там. mpm-winnt - это вариант многопоточного MPM для Windows, поэтому он также должен работать.

Худшее, что может случиться, это то, что вызов будет выполнен как обычный fsockopen вызов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...