Làm thế nào để hạn chế sử dụng băng thông khi sử dụng HttpWebRequest?Làm thế nào để hạn chế sử dụng băng thông khi sử dụng HttpWebRequest?
9
A
Trả lời
0
Bạn có thể kết nối Proxy property với proxy HTTP hạn chế băng thông, ví dụ: Squid can do this. Có lẽ không phải là một giải pháp thuận tiện, nhưng nó chắc chắn sẽ hoạt động.
1
Nếu bạn đang làm nó trong mã tôi khuyên bạn nên sử dụng một cái gì đó giống như Rx để giúp đơn giản hóa việc sử dụng bộ đếm thời gian, vv
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;
}
}
}
Các vấn đề liên quan
- 1. Làm thế nào để hạn chế sử dụng băng thông của ứng dụng C# của tôi?
- 2. Làm thế nào để hạn chế đồng thời khi sử dụng diễn viên trong Scala?
- 3. Hạn chế trên miền khi sử dụng socket.io?
- 4. hạn chế băng thông mạng của một quá trình java
- 5. Làm thế nào để hibernate sử dụng một chuỗi rỗng cho một hạn chế bình đẳng?
- 6. Sử dụng HTTPS và httpWebRequest
- 7. Làm thế nào để sử dụng SQLiteOpenHelper mà không có hoặc ít hạn chế sử dụng Bối cảnh?
- 8. Điều chỉnh băng thông bằng cách sử dụng Twisted
- 9. Hạn chế sử dụng bộ nhớ khi đọc các tệp
- 10. Làm thế nào để hạn chế sử dụng bộ nhớ ảo bởi node.js?
- 11. Làm thế nào để hạn chế setAccessible chỉ sử dụng "hợp pháp"?
- 12. Làm thế nào để sử dụng SSL3 thay vì TLS trong một HttpWebRequest cụ thể?
- 13. Làm thế nào để hạn chế ffmpeg chỉ sử dụng 50% CPU của tôi?
- 14. Làm cách nào để đo mức sử dụng băng thông bộ nhớ trên Windows?
- 15. Làm thế nào để chế nhạo Controller.User sử dụng moq
- 16. lỗi sử dụng hạn chế từ khóa
- 17. Hạn chế băng thông tải xuống với cURL
- 18. Làm thế nào để sử dụng HttpWebRequest với phương thức GET
- 19. cách sử dụng cookie với HttpWebRequest
- 20. Làm thế nào để hạn chế thời gian thực hiện của chương trình khi sử dụng tiến trình con?
- 21. Sử dụng Lambdas làm hạn chế trong NUnit 2.5?
- 22. Hạn chế sử dụng bộ nhớ của ứng dụng .net
- 23. Làm thế nào để sử dụng inotify?
- 24. Làm thế nào để xác định giới hạn trên và dưới khi sử dụng numpy.random.normal
- 25. Làm thế nào để biết băng thông mạng được sử dụng tại một thời điểm nhất định?
- 26. Sử dụng. Net những hạn chế nào (nếu có) có trong sử dụng XmlSerializer không?
- 27. Làm thế nào để sử dụng và khi nào là memmove sử dụng tốt trong C?
- 28. Làm thế nào để sử dụng svcutil để tạo một proxy C# WCF từ một dịch vụ web sử dụng hạn chế để ẩn các phần tử?
- 29. Làm thế nào để có được một trang web tổng kích thước trở lại/băng thông sử dụng để gọi một trang web
- 30. Làm thế nào để đạt được "không ở" bằng cách sử dụng Hạn chế và tiêu chí trong Hibernate?
Tôi thích video này. Loại làm cho tôi cảm thấy một chút ngớ ngẩn lăn throttler riêng của tôi :) – Tom
Câu hỏi đặt ra là làm thế nào để giải quyết nó với mã, không phải làm thế nào để sử dụng một công cụ bên ngoài để đạt được nó. – SeriousM