¿Cómo limitar el uso de ancho de banda cuando se utiliza HttpWebRequest?¿Cómo limitar el uso de ancho de banda cuando se usa HttpWebRequest?
9
A
Respuesta
0
Puede conectar el Proxy property a un proxy HTTP que limita el ancho de banda, por ejemplo Squid can do this. Tal vez no sea una solución conveniente, pero definitivamente funcionaría.
1
Si usted lo está haciendo en el código recomiendo el uso de algo así como Rx para ayudar a simplificar el uso del temporizador, etc.
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;
}
}
}
Cuestiones relacionadas
- 1. Uso del ancho de banda de memoria
- 2. Limite velocidades de ancho de banda
- 3. ¿Cómo se limita programáticamente el uso del ancho de banda de mi aplicación C#?
- 4. ¿Cómo limitar el ancho de div?
- 5. Cálculo del ancho de banda
- 6. ¿Cómo controlar/calcular el uso del ancho de banda de un servidor NodeJS?
- 7. ¿Cómo medir el uso del ancho de banda de la memoria en Windows?
- 8. ¿Cómo rastreo el uso de ancho de banda público en instancias EC2 o IP elásticas?
- 9. Registrar el uso de ancho de banda y el tiempo de solicitud en ASP.NET 4.0
- 10. Estrangulamiento del ancho de banda con netem?
- 11. Limitación de membresía por ancho de banda
- 12. gestión de ancho de banda con rieles?
- 13. ¿Cómo se usa HttpWebRequest (.NET) de forma asíncrona?
- 14. ¿Sigue CURLOPT_NOBODY descargando el cuerpo? Utilizando el ancho de banda
- 15. Limitar el ancho de la tabla
- 16. Android - ¿Cómo rastrear el uso del ancho de banda por aplicación o proceso?
- 17. Vídeo HTML5: Detección de ancho de banda
- 18. Disminución del ancho de banda en Python
- 19. Disminución del ancho de banda en C#
- 20. ¿Cómo uso HttpWebRequest con el método GET
- 21. Uso de HTTPS y httpWebRequest
- 22. limitando el ancho de banda de red de un proceso java
- 23. UIWebView - Limitar el ancho del contenido
- 24. Detectando la velocidad de conexión de red y el uso de ancho de banda en C#
- 25. Obtener estadísticas de ancho de banda de conexión
- 26. ¿SSL causa mucho más ancho de banda?
- 27. ¿Simular ancho de banda limitado desde Chrome?
- 28. ¿Cómo se usa `to_sql` en AREL cuando se usa` average() `?
- 29. ¿Cómo puedo obtener la velocidad de ancho de banda disponible?
- 30. ¿Cómo obtener la velocidad de ancho de banda (descarga) actual?
me gusta esto. Me hace sentir un poco tonto rodando mi propio throttler :) – Tom
La pregunta es sobre cómo resolverlo con código, no cómo usar otra herramienta externa para lograrlo. – SeriousM