Einschränken der Bandbreite einer SSL-Verbindung

8

Ich stellte eine Frage , wie man einen Python-Upload drosselt, der mich geschickt hat zu dieser Antwort , wo ich von einer kleinen Hilfsbibliothek namens socket-throttle . Das ist alles gut und schön für reguläres HTTP und wahrscheinlich auch für die meisten einfachen Anwendungen des Sockets. Ich versuche jedoch, eine SSL-Verbindung zu drosseln, und zu versuchen, socket-throttle mit der Standard-SSL-Bibliothek zu kombinieren (wird implizit von requests verwendet), verursacht eine Ausnahme tief im Inneren der Bibliothek:

%Vor%

Nun, das ist ein Wermutstropfen. Wie Sie sehen können, versucht das Paket ssl , eines der privaten Felder des Sockets, _sock , anstatt socket selbst zu verwenden. (Ist das nicht der Punkt von privaten Feldern, dass Sie nicht von außen auf sie zugreifen sollen? Grr.) Wenn ich versuche, mich in dieses Feld auf meinem ThrottledSocket -Objekt zu injizieren, stoße ich auf dieses Problem:

%Vor%

Was nun? Gibt es woanders wo ich die Python-Kommunikation begrenzen könnte? Oder gibt es einen saubereren Weg, als die Socket-Implementierung zu überschreiben? Das ist sowieso egal, da das ssl -Paket einfach versucht, es komplett zu umgehen.

    
Alex 30.01.2015, 15:26
quelle

2 Antworten

4

Je nach Ihren Anforderungen können und sollten Sie dieses spezielle Problem auf Betriebssystemebene statt auf Anwendungsebene lösen.

Das Annähern an die Betriebssystemebene hat zwei Vorteile. Erstens macht es keinen Unterschied, wie die verwendeten Sockets verwendet werden (HTTP oder HTTPS oder IRC oder einige Ping-of-Death-Pakete - es spielt keine Rolle). Zweitens, je mehr Sie die verschiedenen Komponenten Ihres Systems entkoppeln, desto einfacher ist es, danach Änderungen vorzunehmen und Probleme zu beheben.

Es gibt Tools (zumindest für POSIX-konforme Systeme) zur Drosselung der Bandbreite von Netzwerkschnittstellen und / oder Prozessen. Vielleicht möchten Sie sich diese ansehen, zum Beispiel:

  • trickle (zur Gestaltung des Traffics von Prozessen)
  • wondershaper (um den Traffic von ganzen Netzwerkschnittstellen zu gestalten, habe ich das tatsächlich innerhalb von modernes Ubuntu, und es funktioniert ganz gut)

Diese Diskussionen könnten für Sie relevant sein:

Jan-Philip Gehrcke 05.02.2015 17:32
quelle
1

Es sieht so aus, als wollten Sie HTTP-Anfragen drosseln. Wenn dies der Fall ist, können Sie stattdessen RequestsThrottler ausprobieren. Python Anfragen sind viel schöner als httplib.

    
kichik 01.02.2015 23:16
quelle