Wie bandwidth Verwendung begrenzen, wenn Sie HttpWebRequest verwenden?Wie kann man die Bandbreite bei der Verwendung von HttpWebRequest begrenzen?
9
A
Antwort
0
Sie können die Proxy property an einen bandbreitenlimitierenden HTTP-Proxy anschließen, z. B. Squid can do this. Vielleicht keine praktische Lösung, aber es würde definitiv funktionieren.
1
Wenn Sie es in Code tun empfehle ich so etwas wie Rx mit der Timer Verwendung usw.
class Uploader
{
/// <summary>Thread-safe flag to ensure that a packet isn't currently sending</summary>
private volatile bool isPacketSending = false;
/// <summary>
/// HTTP Posts a stream to a web address with a maximum bytes per second until the file is uploaded
/// </summary>
/// <param name="address">The web address to post the file to</param>
/// <param name="requestBody">The request body to stream at a maximum speed</param>
/// <param name="bytesPerSecond">The maximum number of bytes to send every second</param>
/// <returns>Returns an observable sequence of the bytes read so far</returns>
public IObservable<long> PostStreamThrottledAsync(Uri address, Stream requestBody, int bytesPerSecond)
{
if (!requestBody.CanRead)
{
throw new InvalidOperationException("Request body stream cannot be read from");
}
return Observable.Using(
() =>
{
var client = new WebClient();
return client.OpenWrite(address);
},
outputStream => Observable.Return(0L).Concat(Observable.Interval(TimeSpan.FromSeconds(1)))
.TakeWhile(tick => SendPacket(requestBody, outputStream, bytesPerSecond) != 0)
.Select(_ => requestBody.Position));
}
/// <summary>
/// Sends a packet up to the maximum bytes specified
/// </summary>
/// <param name="requestBody">The stream to read from</param>
/// <param name="output">The stream to write to</param>
/// <param name="bytesPerSecond">The number of bytes to send</param>
/// <returns>Returns the number of bytes actually sent; zero if at end of stream; -1 if we are exceeding throughput capacity.</returns>
private int SendPacket(Stream requestBody, Stream output, int bytesPerSecond)
{
if (isPacketSending)
{
return -1;
}
try
{
isPacketSending = true;
var buffer = new byte[bytesPerSecond];
var bytesRead = requestBody.Read(buffer, 0, bytesPerSecond);
if (bytesRead != 0)
{
output.Write(buffer, 0, bytesRead);
}
return bytesRead;
}
finally
{
isPacketSending = false;
}
}
}
Verwandte Themen
- 1. Periodische Timeouts bei Verwendung von HttpWebRequest
- 2. Ist es ratsam, die Größe der Formulare bei der Verwendung von Golang (weiter) zu begrenzen?
- 3. Begrenzung der Bandbreite von http bekommen
- 4. Wie kontrolliert man die Bandbreite der Ajax-Anfrage?
- 5. Wie ignoriert man bei Verwendung von string.text.contains?
- 6. Wie aktiviert man die Zeitlupe bei Verwendung von ACTION_VIDEO_CAPTURE Intent?
- 7. Wie organisiert man Schrittdefinitionen bei der Verwendung von Gurken-Java?
- 8. Wie behandelt man ContentNotFoundError bei der Verwendung von wkhtmltopdf?
- 9. Wie vermeidet man Fehler bei der Verwendung von CRTP?
- 10. Wie man die Anzahl der Parkettdateien steuert, die bei der Verwendung von partitionBy generiert wurden
- 11. Wie Session-Timeout bei Verwendung von CookieContainer
- 12. Wie steuert man Array-Schlüssel bei der Verwendung von array_push()?
- 13. Wie schränkt man die Bandbreite mit Java netty korrekt ein?
- 14. Wie kann man die Ausgabe eines Ruby `pp` Calls begrenzen?
- 15. Wie kann man die Dauer des Videos mit Dropzonejs begrenzen?
- 16. Wie vermeidet man zusätzliche Dateien bei der Verwendung von clearfsimport?
- 17. Wie kann man die Größe einer Tabelle begrenzen?
- 18. Wie kann man Winkel eines Vektors begrenzen?
- 19. Scrapy, wie kann man die Zeit pro Domain begrenzen?
- 20. Warum erhalte ich bei einigen Links bei Verwendung von HttpWebRequest den Fehler "(304) Not Modified"?
- 21. C# vs VB Syntax bei der Verwendung von HttpWebRequest.Create
- 22. Wie man eine Webseite Total Return Größe erhalten/verwendete Bandbreite
- 23. bei der Verwendung von EditorFor
- 24. Wie kann man den Speicherverbrauch von Phusion-Fahrgästen begrenzen?
- 25. Wie behalte ich die Iterationsnummer bei der Verwendung von each_char?
- 26. Wie kann Nebenläufigkeit bei der Verwendung von Scala-Akteuren begrenzt werden?
- 27. verwirrt bei der Verwendung von "using-Block" - C#
- 28. Kann man bei Verwendung von TeamBuild eine "globale" Warteschlange haben?
- 29. Schwierigkeit bei der Verwendung von Texturatlanten
- 30. Wie man dynamische Schleifenzähler bei Verwendung der Bedingung
ich dies gerne helfen zu vereinfachen. Irgendwie macht es mir ein bisschen albern, meinen eigenen Throttler zu rollen :) – Tom
Die Frage ist, wie man es mit Code löst, nicht wie man ein anderes externes Tool benutzt, um es zu erreichen. – SeriousM