Auslastung einer Internetverbindung?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Scholastik
User
Beiträge: 51
Registriert: Freitag 7. Juli 2017, 12:35

Donnerstag 19. November 2020, 17:26

Hallo,

ich kenne mich 0 mit den technischen Apsekten einer Internetverbindung von A nach B aus, bitte verzeiht, wenn ich Begriffe völlig durcheinander werfe oder falsch verwende.

Aber ich bin client einer websocket API und erhalte einen stream an nachrichten.
Dabei habe ich festgestellt, dass je nach gewählter Art, meine Verbindung recht schnell abreißt. Mit Art meine ich die Häufigkeit und Größe der Nachrichten die ich bekomme.
Wähle ich recht große Nachrichten und ein Zeitintervall von 0.1 sekunden, dann gibt es das Problem. Nehme ich kleinere nachrichten gibts das Problem nicht. Nehme ich große Nachrichten mit 1 sekunde intervall, gibts das Problem auch nicht.

Ich habe bei meinen Tests auch in Windows mit dem Tool NetSpeedMonitor meinen Bandbreiten-verbrauch im blick gehabt und festgestellt, dass bei den Fällen wo die Verbindung zügig abbricht, meine Internetverbindung wohl maximal ausgelastet ist. Bei den anderen Fällen ist sie das nicht -> die maximale Bandbreite ist wohl das Problem.

Nun möchte ich möglichst automatisiert in Python meine Bandbreiten-Auslastung im Blick behalten, damit ich immer weiß wann Probleme mit der websocket verbindung auf die Bandbreite zurückzuführen sind und wann es wohl andere Ursachen haben muss.

Was ich bisher versucht hab:
Mein bisheriger Ansatz war über Seiten wie speedtest.net und deren API meine maximale bandbreite rauszufinden (leider scheint es nur ein durchschnittswert zu sein, kein maxwert). Über psutil wollte ich dann mit net_io_counters().bytes_recv im sekundentakt gucken, wieviel bytes pro sekunde aktuell runtergeladen werden. Und sobald ich dann zb 95% des maxwertes erreicht habe, weiß ich, dass es kritisch wird:
Doch das funktioniert nicht, allein das Herausfinden des maximalen Wertes klappt nicht, da dies wohl abhängig davon ist, wohin ich mich verbinde (sollte also optimalerweise zu der url sein, wo auch die websocket hin verbunden ist). Aber auch dann kann das wohl stark schwanken.

Für die websocket verbindung selbst habe ich aktuell 2 Wege, 1) modul ws4py und 2) das modul "websockets". ich weiß noch nicht welches ich final nutzen werde, probiere zurzeit mit beiden rum. Kann man innerhalb dieser Moduel eventuell prüfen, wie stark die Verbindung ausgelastet ist?
Während die Weboscket soviel "traffic zieht" funktionieren auch REST API calls nicht mehr, bzw eben mit sehr sehr starker Verzögerung.


Wie kann ich nun also die Bandbreite überwachen und wissen, wann diese zu einer bestimmten url ausgelastet ist und wann nicht?
Antworten