2013-06-25 4 views
5

Ich versuche zu verstehen, was sind die HTTP-Pipelining und HTTP Keep-Alive-Verbindungen, und versuchen, eine Verbindung zwischen diesen beiden Themen und Server Sent Events-Technologie herzustellen.HTTP: Was sind die Beziehungen zwischen Pipelining, Keep-Alive und Server Sent Events?

Soweit ich verstehe, HTTP Keep-Alive-Verbindung ist die Standardeinstellung in HTTP 1.1 Art und Weise TCP verwenden, wenn die etablierten einmal TCP-Verbindung für das Senden von mehreren HTTP verwendet wird, fordert eine nach der anderen. HTTP-Pipelining ist die Fähigkeit des Clients, Anforderungen an den Server zu senden, während Antworten auf vorherige Anforderungen noch nicht mit der gleichen TCP-Verbindung empfangen wurden, die in Browsern standardmäßig nicht verwendet wird.

Meine Fragen:

1), wenn es möglich ist, mehrere Anfragen an den Server einer nach dem anderen mit einer TCP-Verbindung zu senden - wie der Client zwischen den Antworten unterscheiden können? Ich nehme an, Client verwendet FIFO-Reihenfolge des Sendens von Antworten von Server?

2) Warum sollten nicht-idempotente Anfragen wie POST-Anfragen nicht weitergeleitet werden (laut Wikipedia)?

3) Was ist mit den Einschränkungen des Web-Servers: ist die Anzahl der möglichen offenen TCP-Verbindungen begrenzt? Wenn ja, wenn einige Clients Keep-Alive-Verbindungen halten, können andere keine Verbindungen herstellen, und dies kann zu einem Problem führen, oder?

4) Server gesendet Ereignisse verwenden die Keep-Alive-Verbindung, aber soweit ich verstehe, verwenden SSE nicht Pipelining. Stattdessen schaffen sie es, mehrere Antworten auf eine Anfrage zu verarbeiten, oder sie senden nur eine weitere Anfrage, wenn die nächste Antwort mit dem Ereignis eintrifft. Welcher Tipp ist richtig?

5) Eine TCP-Verbindung bedeutet eine Buchse? Ein Socket bedeutet eine TCP-Verbindung? Schließen/Öffnen der Buchse bedeutet Schließen/Öffnen der TCP-Verbindung?

Antwort

4
  1. Ja, FIFO. TCP/IP garantiert, dass die Daten in der richtigen Reihenfolge geliefert werden, so dass die Antworten nicht in einer anderen Reihenfolge ankommen können (wenn der Server/Proxy fehlerhaft ist und die Antworten in falscher Reihenfolge sendet, sind Sie völlig fertig).

  2. Ich erinnere mich keinen Grund pro HTTP-Spezifikation. Es kann nur Vorsicht sein, da das Pipelining in einigen Proxies/Servern schlecht implementiert ist.

  3. HTTP-Spezifikation schlägt 2 Verbindungen pro Server vor, Browser haben sich auf 6-8 Verbindungen pro Server festgelegt, aber es gibt kein festes Limit. Das Auslaufen von Verbindungen ist ein echtes Problem für Apache, und für Situationen mit hoher Last wird empfohlen, KeepAlive in Apache zu deaktivieren und einen Proxy (z. B. HAProxy) zu verwenden, der Keep-Alive-Funktionalität kostengünstig für Clients bereitstellen kann.
    Der Vorteil eines Proxys ist, dass ein Proxy Verbindungen zu mehreren Servern verteilen kann (hilft bei der Skalierung) oder den Datenverkehr ändern kann (z. B. gzip komprimiert alles, selbst wenn serverseitige Software dies nicht tut).

  4. SSE verlässt sich nicht auf Keep-Alive. Es verwendet nicht mehrere Antworten. Es ist eine einzelne Antwort, die ewig dauert, um "heruntergeladen" zu werden, so dass Pipelining oder Keep-Alive für SSE irrelevant sind. Die TCP/IP-Verbindung kann keine weiteren Antworten zurückgeben, während die SSE-Antwort gesendet wird.
    SSE wird den Server beschäftigt halten, solange die Verbindung offen ist (so typisch für jeden Benutzer die ganze Zeit). Deshalb ist es am besten, SSE mit Node.js/Tornado zu verwenden, das Hunderttausende Verbindungen statt PHP/Apache verarbeiten kann, das für wenige Verbindungen gleichzeitig entworfen ist.

  5. Sockets sind Programmierschnittstelle für TCP/IP-Verbindungen. Im Allgemeinen ja, ein Socket ist eine Verbindung.

+0

Danke porneL! 1) Aber was ist, wenn eine Antwort in einer falschen Reihenfolge in Bezug auf die gesendete Reihenfolge angekommen ist? 3) Was ist der Vorteil der Verwendung von Proxy? muss es trotzdem die gleichen Verbindungen zum Server herstellen? 4) Also bedeutet die Verwendung von SSE + 1 Verbindung, was die Serverbelastung erhöht? – KutaBeach

+0

@KutaBeach Ich habe meine Antwort erweitert – Kornel

Verwandte Themen