Nasıl bant genişliği kullanımını sınırlamak için?HttpWebRequest kullanırken bant genişliği kullanımı nasıl sınırlanır? HttpWebRequest kullanırken
9
A
cevap
0
Örneğin Squid can do this için, bir bant genişliği sınırlayıcı HTTP proxy Proxy property kanca başladı. Belki uygun bir çözüm değil, ama kesinlikle işe yarayacaktı.
1
ben vb zamanlayıcı kullanımını Bunu beğendim
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;
}
}
}
İlgili konular
- 1. HttpWebRequest
- 2. App kapatırsa kullanımı HttpWebRequest
- 3. Bellek Bant Genişliği Kullanımı
- 4. HttpWebRequest
- 5. HttpWebRequest
- 6. C# uygulamamın bant genişliği kullanımı nasıl programlanır?
- 7. Metin genişliği nasıl sınırlanır
- 8. HttpWebRequest için Proxy Proxy
- 9. Erişim Akışı Tampon HttpWebRequest
- 10. HttpWebRequest zaman aşımı
- 11. C# HttpWebRequest WebRequest
- 12. C# JSON Kullanarak HttpWebRequest
- 13. Form verilerini HttpWebRequest
- 14. Bir NodeJS sunucusunun bant genişliği kullanımı nasıl izlenir/hesaplanır?
- 15. Android - Uygulama veya işlemle bant genişliği kullanımı nasıl izlenir?
- 16. Python'da bant genişliği daraltma
- 17. MonoDroid HttpWebRequest ve WebClient güvenilmez?
- 18. iOS: gaz bant genişliği örn. Alamofire
- 19. İç sunucu hatası (500) httpwebrequest
- 20. HttpWebRequest geri dönmüyor, bağlantı kapanıyor
- 21. HttpWebRequest + Windows Auth - NetworkCredential çalışmıyor
- 22. HttpWebRequest Hata: 503 sunucu kullanılamıyor
- 23. HttpWebRequest XML'den DropDownList XML VB.net
- 24. C# HttpWebRequest Temel bağlantı kapatıldı:
- 25. Varargin (...) kullanırken farklı işlev kullanımı nasıl gösterilir?
- 26. İstemci kimlik bilgileriyle SSL üzerinden HttpWebRequest
- 27. HttpWebRequest (.NET) eşzamansız olarak nasıl kullanılır?
- 28. HttpWebRequest, ASP.NET ortamında önbellek kullanmaya nasıl zorlanır?
- 29. HttpRequestHeader'ı bir HttpWebRequest için nasıl ayarlayabilirim?
- 30. Verileri HttpWebRequest kullanarak MVC Denetleyicisine nasıl gönderirim?
basitleştirmeye yardımcı olmak için Rx gibi bir şey kullanmanızı öneririz kodunda yapıyorsanız. Tıpkı bana kendi throttler haddeleme biraz saçma hissettiren :) – Tom
soru bunu başarmak için başka harici aracının nasıl, koduyla değil çözmek için nasıl ilgili. – SeriousM