Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: C++ (alle ISO-Standards) ::  Bandbreite eines Uploads begrenzen  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
eXc
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.12.2016
Beiträge: 24
Beitrag eXc Mitglied 10:59:03 29.12.2016   Titel:   Bandbreite eines Uploads begrenzen            Zitieren

Hallo,

gibt es eine Möglichkeit die Bandbreite eines Uploads zu begrenzen. Ich habe gelesen das das mit sleep funktionieren könnte, dadurch die Verbindung aber sehr belastet würde.
Die beste Lösung wäre wohl eine Übertragung per TokenBucket, finde da aber relativ wenig Informationen wie dies umzusetzen wäre.

Schön wäre es noch, wenn dies per FTP funktionieren würde. Es gibt Seiten auf denen man angeblich Scripte käuflich erwerben kann, aber wenig Informationen darüber ob es auch so funktioniert.

Ich würde so eine Art der Übertragung benötigen um parallel zu einem Spiel Daten langsam übertragen zu können die für Auswertungen benötigt werden.

mfg Christian 'eXc'
Mechanics
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.01.2012
Beiträge: 4087
Beitrag Mechanics Mitglied 16:40:18 29.12.2016   Titel:              Zitieren

Du beschreibst den Kontext überhaupt nicht. Gehts dir um dein Programm? Willst du ein Programm schreiben, dass die Bandbreite für ein fremdes Programm reguliert? Wenn ja, für welches Betriebssystem?
Gehen tut auf jeden Fall alles.
DocShoe
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.04.2008
Beiträge: 2695
Beitrag DocShoe Mitglied 17:57:02 29.12.2016   Titel:              Zitieren

Google mal nach Traffic Shaper

_________________
Die fünf häufigsten Anzeichen für Faulheit:
1.
hustbaer
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2006
Beiträge: 23493
Beitrag hustbaer Mitglied 05:28:05 30.12.2016   Titel:              Zitieren

@eXc
Wenn du nur möchtest dass dein Spiel "ungestört" läuft, dann kannst du das u.U. auch über das QoS Feature deines Routers regeln. Sofern der QoS kann. Router-Betriebssysteme wie dd-wrt können das normalerweise.

_________________
Until every person can enjoy all their human rights, we will not stop. I support Amnesty International. Will you?
https://www.amnesty.org / https://www.amnesty.de / https://www.amnesty.at
eXc
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.12.2016
Beiträge: 24
Beitrag eXc Mitglied 21:45:18 30.12.2016   Titel:              Zitieren

Also ich möchte mit einem Programm Daten, am liebsten zu einem FTP übertragen. Dieses Programm läuft wissentlich auf PCs von verschiedenen Benutzern.
Da das Programm aber im Hintergrund laufen soll, müsste die Datenübertragung möglichst langsam geschehen um ein im Vordergrund laufendes Online-Spiel nicht zu beeinträchtigen.
Das Programm läuft auf Windows-Systemen. Bei den Daten wird es sich um Bilder handeln, nicht groß aber schon ein paar.

mfg Christian 'eXc'
DirkB
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.01.2016
Beiträge: 821
Beitrag DirkB Mitglied 21:48:57 30.12.2016   Titel:              Zitieren

Dann wartest du eben etwas zwischen den einzelnen Datenblöcken.

Du musst nicht das ganze Bild mit einem send übertragen.
Mechanics
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.01.2012
Beiträge: 4087
Beitrag Mechanics Mitglied 22:37:09 30.12.2016   Titel:              Zitieren

So ganz einfach ist das Thema nicht... In Windows gibts z.B. BITS, Background Intelligent Transfer Service oder so. Er nutzt die ganze Bandbreite, wenn sie verfügbar ist, drosselt aber, wenn andere die Bandbreite brauchen.
Besser würde man es wahrscheinlich tatsächlich zentral regeln, also z.B. auf dem Router QoS einstellen. Ist aber Konfigurationsaufwand, das will man dann meistens doch nicht haben.
hustbaer
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2006
Beiträge: 23493
Beitrag hustbaer Mitglied 04:58:52 31.12.2016   Titel:              Zitieren

Wenn man das Spiel per QoS bevorzugt, hat das den Vorteil, dass man grundsätzlich so ziemlich alles nebenbei laufen lassen kann ohne das Spiel all zu schlimm auszubremsen.
Und dass man QoS laufen hat sollte sich auch abseits vom Spielen positiv bemerkbar machen. z.B. dadurch dass man trotzdem normal weitersurfen kann während grosse Downloads von schnellen Servern laufen (ISOs etc.).

_________________
Until every person can enjoy all their human rights, we will not stop. I support Amnesty International. Will you?
https://www.amnesty.org / https://www.amnesty.de / https://www.amnesty.at
eXc
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.12.2016
Beiträge: 24
Beitrag eXc Mitglied 13:09:16 09.01.2017   Titel:              Zitieren

Das ist aber glaub ich nicht das was ich suche :/ Ich möchte ja nichts auf dem Computer oder Router selber einstellen, sondern das Programm soll den Upload selber regeln.

DirkB schrieb:
Dann wartest du eben etwas zwischen den einzelnen Datenblöcken.

Du musst nicht das ganze Bild mit einem send übertragen.


Das wäre immo wohl die beste Alternative, wie könnte ich das denn umsetzen? Gibt es diesbezüglich eventuell Code-Beispiele?

Mein letzter Ansatz war bis jetzt, den Upload auf dem FTP zu begrenzen, so dass alle Clients nur mit einer bestimmten Bandbreite uploaden können. Würde diese Lösung aber lieber Clientseitig lösen wollen.
hustbaer
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2006
Beiträge: 23493
Beitrag hustbaer Mitglied 23:23:04 09.01.2017   Titel:              Zitieren

Dann musst du den Upload Code selbst schreiben oder ein open source Programm entsprechend modifizieren.
Bzw. kannst du natürlich auch gucken ob es sowas schon fertig gibt, also ein Programm das nen FTP Upload kann und eine Option zur Drosselung der Upload-Geschwindigkeit hat.

robocopy hätte z.B. so ne Option:
Code:
/IPG:n :: Inter-Packet Gap (ms), to free bandwidth on slow lines.

Nicht dass robocopy jetzt FTP Uploads könnte, aber vielleicht findet man mit dem Suchbegriff "Inter Packet Gap" ja 'was passendes.

Und...
Falls du es selbst umsetzen bzw. ein open source Programm anpassen möchtest... die nötige Änderung ist relativ einfach. Irgendwo wird send() in einer Schleife aufgerufen um die Daten zu verschicken.
Den Code in dieser Schleife musst du so anpassen dass
a) send() mit einer relativ kleinen Puffergrösse aufgerufen wird. Ich würde sagen maximal 1400 Byte.
b) Nach send() ne kleine Pause reinmachen. Unter Windows heisst die Funktion dafür Sleep und nimmt Millisekunden, auf anderen Systemen geht es anders (usleep, ...).
Und vermutlich noch...
c) Vor dem Versenden der Daten (also unmittelbar vor dieser Schleife) die Option TCP_NODELAY für den Socket aktivieren. Ohne TCP_NODELAY würde das OS versuchen Send-Coalescing zu machen, was bei kleinen Puffergrössen das schöne handgestrickte Timing kaputt machen würde. Falls der Socket danach weiterverwendet wird würde ich TCP_NODELAY danach wieder deaktivieren.

Wenn du dann noch reinfummelst dass man beide Werte (Puffergrösse und Delay) per Commandline übergeben kann, dann kannst du damit leicht rumexperimentieren. Also welche Werte ausreichend sind um das Spiel nicht mehr merkbar zu beeinflussen.

_________________
Until every person can enjoy all their human rights, we will not stop. I support Amnesty International. Will you?
https://www.amnesty.org / https://www.amnesty.de / https://www.amnesty.at
C++ Forum :: C++ (alle ISO-Standards) ::  Bandbreite eines Uploads begrenzen  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.