2009-07-13 8 views
3

Um genauer zu sein, verwende ich Python und einen Pool von HTTPConnection (httplib) und fragte mich, ob es eine Grenze für die Anzahl der gleichzeitigen HTTP-Verbindungen auf einem Windows-Server.Was ist die maximale gleichzeitige HTTP-Verbindungen auf einem Rechner erlaubt (Windows Server 2008) mit Python

+0

Angenommen, ich könnte 1000 gleichzeitige Verbindungen zum selben Server erstellen? ohne die Leistung zu beeinträchtigen. – Dan

+0

Warum versuchst du nicht einfach 1000 Verbindungen zu erstellen und zu sehen, was passiert? –

+0

Ich habe, bei den 1000 Verbindungen verlangsamt ~ 500ms/Anfragen. Bei 10 Verbindungen bin ich bei ~ 10 ms – Dan

Antwort

3

Gemäß der HTTP RFC sollte ein Client nicht mehr als 2 gleichzeitige Verbindungen zu einem Webserver oder Proxy verwalten. Die meisten Browser berücksichtigen dies jedoch nicht - Firefox 3.5 ermöglicht 6 pro Server und 8 pro Proxy.

Kurz gesagt, Sie sollten 1000 Verbindungen zu einem einzelnen Server nicht öffnen, außer Ihre Absicht ist, um die Leistung des Servers zu beeinträchtigen. Stresstests Ihres Servers wären ein gutes legitimes Beispiel.


[Bearbeiten]
Wenn dies ein Proxy Sie sprechen sind, dann ist das ein wenig anders aus. Mein Vorschlag ist, Verbindungspooling zu verwenden. Finde heraus, wie viele gleichzeitige Verbindungen dir die meisten Anfragen pro Sekunde geben und setze eine harte Grenze. Extra-Anfragen müssen nur in einer Warteschlange warten, bis der Pool freigibt. Seien Sie sich jedoch bewusst, dass ein einzelner Prozess standardmäßig auf 1024 Dateideskriptoren begrenzt ist.

Werfen Sie einen Blick durch apache's mod_proxy für Ideen, wie Sie damit umgehen.

+0

Haben Sie einen Verweis auf die RFC, die Sie erwähnen? Ist es der HTTP-RFC? – ThomasH

+0

Ich sollte wahrscheinlich hinzugefügt haben, anstatt nur autoritativ zu klingen :) – JimB

+0

Ich möchte nicht meinen Server testen Stress. Das eigentliche Problem ist, dass mein Server load balanced ist und> 2000 Anfragen/Sekunden dauern kann. Aber jetzt müssen wir alle Anforderungen an einen "Proxy" -Server weitergeben, und dieser Proxy-Server erstellt eine neue Verbindung pro vom Client empfangener Anfrage. So, jetzt sind wir mit diesem Design fest und müssen es in Python tun. :( – Dan

2

AFAIK, die Anzahl der Internet-Sockets (notwendig, um TCP/IP-Verbindungen herzustellen) ist natürlich auf jeder Maschine begrenzt, aber es ist ziemlich hoch. 1000 simultane Verbindungen sollten für den Client-Rechner kein Problem sein, da jeder Socket nur wenig Speicher benötigt. Wenn Sie über diese Kanäle Daten empfangen, kann sich dies jedoch ändern. Ich habe von Test-Setups gehört, die mehrere tausend Verbindungen gleichzeitig von einem einzigen Client aus erstellt haben.

Die Geschichte ist in der Regel für den Server anders, wenn es für jede eingehende Verbindung schweres Heben (wie Abzweigen eines Worker-Prozesses etc.). 1000 eingehende Verbindungen werden beeinträchtigen ihre Leistung, und kommen aus dem gleichen Client können sie leicht für einen DoS-Angriff genommen werden. Ich hoffe, Sie sind verantwortlich für den Client und den Server ... oder ist es die gleiche Maschine?

Verwandte Themen