Was ist der Unterschied zwischen der Option keep_alive und der persistenten HTTP-Anfrage?

9

Kann uns jemand den Unterschied im Verhalten zwischen den folgenden Parametern erklären:

keep_alive Parameter in der Zend_Http_Client Klasse?

und

persistent in der Zend_Http_Client_Adapter_Socket-Klasse?

Ich würde gern verstehen, was ich tun muss, um eine Reihe von HTTPS-Verbindungen offen zu halten (um die Aushandlung der SSL zu vermeiden).

Danke, Gaston

    
Gaston Annebicque 12.01.2011, 17:36
quelle

3 Antworten

1

Wenn Sie die persistente Verbindung verwenden, sollten Sie auch die Keep-Alive-Funktion verwenden, da Ihre Persitente ohne die Alive-HTTP 1.1-Verbindung eine Menge Arbeit aufwenden muss, um den Job zu emulieren.

Bearbeiten: (es war Zeit zu essen)

Keepalive -Einstellungen sprechen von einer ziemlich kurzen Einstellung, die vom Server festgelegt wird. Standardmäßig behandelt Apache 15s für Keep-Alive-Anfragen, aber eine aktuell optimierte Einstellung ist 5s. Dies geschieht hauptsächlich, um dem HTTP-Client zu helfen, js und css herunterzuladen, die an eine Seite in derselben HTTP-Verbindung angehängt sind. Wenn Sie die Servereinstellungen anpassen können, können Sie am längsten Keep-Alive-Abfragen versuchen (aber seien Sie vorsichtig, dies wird die Anzahl der Clients, die von Ihrem Server akzeptiert werden, ernsthaft begrenzen).

Der Modus

Permanente Verbindung wird ausgeführt, um eine dauerhafte persistente Verbindung zu emulieren. Der geöffnete Socket wird am Ende des Skripts nicht geschlossen. Sie sollten mit dieser Einstellung sehr vorsichtig sein. Befindest du dich im CLI-Modus? FCGI ?. Wenn Sie in einem Apache-Prozess ausgeführt werden, bin ich mir nicht sicher, ob Sie bei der nächsten Anfrage dieses Skripts die gleiche Verbindung erhalten (die möglicherweise von einem anderen Apache-Prozess gehandhabt wird). Am schlimmsten ist es sogar, wenn Ihr Code läuft mehrere Apache-Server in einer großen Bereitstellung. Und das ist für die Client (PHP) -Seite, aber es kann auch ein großer Schmerz für den Zielserver sein.

Erneut bearbeiten : (etwas über SSL muss gesagt werden)

Sind Sie sicher, dass Sie die SSL-Verhandlungszeit optimieren müssen? SSL verwendet Cache, zumindest auf Serverseite, um die Verhandlung auf die erste Anfrage zu beschränken. Das clientseitige Caching der SSL-Sitzung erfolgt möglicherweise über die PHP-Funktion stream_socket_client (die von der Zend-Klasse verwendet wird. Falls nicht, könnten Sie eine neue Klasse testen und die Schnittstelle implementieren) Versuchen Sie es mit curl, da curl standardmäßig SSL-Session-Caching verwendet.

    
regilero 12.01.2011 18:18
quelle
0

KeepAlive bedeutet, dass die Verbindung im Verlauf einer einzelnen Anfrage wiederverwendet werden kann, obwohl sie am Ende der Anfrage geschlossen wird. Persistent bedeutet, dass die Verbindung über die individuelle Anfrage hinaus bestehen bleibt, um von einer nachfolgenden Anfrage im selben PHP-Prozess verwendet zu werden.

    
Kevin Schroeder 12.01.2011 18:10
quelle
0

FYI, während keep-alive die HTTP-Verbindung wiederverwenden soll, behandelt die Adapterklasse (mindestens 1.10) dies nicht korrekt und öffnet unabhängig vom Flag eine neue Verbindung.

    
Roger Halliburton 14.01.2011 23:08
quelle