В чем разница между keep_alive и постоянным параметром для HTTP-запроса? - PullRequest
9 голосов
/ 12 января 2011

Может кто-нибудь объяснить нам разницу в поведении между следующими параметрами:

keep_alive параметр в классе Zend_Http_Client?

и

persistent в классе Zend_Http_Client_Adapter_Socket?

Я хотел бы понять, что мне нужно сделать, чтобы держать связку HTTPS открытой (чтобы избежать аннулирования SSL).Гастон

Ответы [ 3 ]

1 голос
/ 12 января 2011

Если вы используете постоянное соединение, вы должны использовать также keep-alive, так как без сохранения Alive HTTP 1.1 соединения вашему persitent придется проделать большую работу для эмуляции работы.

Редактировать: (пора было есть)

Keepalive settings говорит о довольно коротком настройке, установленной сервером. Apache по умолчанию обрабатывает 15s для запросов Keep-Alive, но текущий оптимизированный параметр равен 5 с. В основном это делается для того, чтобы HTTP-клиент загружал js и css, прикрепленные к странице в том же HTTP-соединении. Если вы можете изменить настройки сервера, вы можете использовать самые продолжительные запросы Keep-Alive (но будьте осторожны, это серьезно ограничит число клиентов, принимаемых вашим сервером).

Постоянное соединение * Режим 1018 * сделан для того, чтобы действительно эмулировать долгосрочное постоянное соединение, открытый сокет не закрыт в конце сценария. Вы должны быть очень осторожны с такой настройкой. Вы в режиме CLI? FCGI ?. Если вы работаете в процессе Apache, я действительно не уверен, что вы получите такое же соединение при следующем запросе к этому сценарию (который может быть обработан другим процессом Apache), даже хуже, если ваш код выполняется несколько серверов Apache в большом развертывании. И это для клиентской (PHP) стороны, но это может быть также большой болью для целевого сервера.

Повторное редактирование : (как-то должно быть сказано о SSL)

Вы уверены, что вам нужно оптимизировать время обсуждения SSL? SSL использует Cache, по крайней мере на стороне сервера, чтобы ограничить обсуждение первым запросом. Кэширование на стороне клиента сеанса SSL может быть выполнено функцией PHP stream_socket_client (которая используется классом Zend. Если нет, то вы можете протестировать новый класс самостоятельно (просто нужно реализовать интерфейс) и попробовать используя curl, в качестве curl по умолчанию используется кэширование SSL-сессии.

0 голосов
/ 15 января 2011

FYI, хотя keep-alive должен повторно использовать HTTP-соединение, класс адаптера (по крайней мере, совсем недавно, как 1.10) не обрабатывает это правильно и открывает новое соединение независимо от флага.

0 голосов
/ 12 января 2011

KeepAlive означает, что соединение может быть повторно использовано в течение отдельного запроса, хотя оно будет закрыто в конце запроса.Постоянное означает, что соединение будет сохраняться после отдельного запроса, чтобы использоваться последующим запросом в том же процессе PHP.

...