c# webrequest bandwidth trafficshaping low-bandwidth

Formando ancho de banda en mi aplicación C#



webrequest bandwidth (2)

Tengo una aplicación de C # que usa una biblioteca nativa que envía video a otra IP a través de Internet usando UDP. No tengo control de tráfico sobre esa biblioteca.

Mi aplicación también llama a los servicios web de otro servidor mediante WebRequest que tengo control sobre ellos.

El problema es:

Cuando tengo poco ancho de banda de Internet, la transmisión de video usa todo mi ancho de banda. Así que no consigo obtener respuestas de mis métodos de servicio web durante ese tiempo.

¿Hay alguna forma de priorizar el WebRequest o guardar algo de ancho de banda para que pueda obtener respuestas de forma segura?


Es bastante sencillo configurar un servidor de retransmisión UDP para transmisiones UDP simples, que luego puede utilizar para regular el tráfico según sea necesario. Puede poner esto en su aplicación para que todo sea autónomo y su servidor de retransmisión sepa cuándo se realizan las solicitudes web. Cree un UdpClient para recibir tráfico en 127.0.0.1 y haga que la biblioteca de transmisión de video se conecte a eso en lugar de a su servidor real. Luego cree otro UdpClient que retransmitirá el tráfico al destino real al que normalmente se conecta con la biblioteca.

Puede limitar el ancho de banda de muchas maneras con este método y cómo hacerlo dependerá en última instancia de sus requisitos. Solo puede pausar el reenvío de marcos UDP cada vez que inicie una solicitud web y reanude el reenvío después de recibir una respuesta si la pausa es aceptable. De lo contrario, puede hacer un seguimiento de los cuadros UDP / segundo promedio a medida que transmite los datos y el límite de velocidad de forma dinámica al 50% (o lo que sea) de eso insertando los retrasos adecuados en su servidor de retransmisión mientras tenga una solicitud web pendiente.

Aquí puede ver un ejemplo de una implementación de servidor de retransmisión UDP simple para solicitudes de DNS, el principio básico sería el mismo:

https://social.msdn.microsoft.com/Forums/en-US/ce062e62-395f-4110-a4dd-3e9ed3c88286/udp-relay-server?forum=netfxnetcom


No conozco ningún método en C # que pueda priorizar el tráfico de esta manera.

Sé que este no es un tipo de respuesta de desbordamiento de pila, pero así es como he manejado los servicios de transmisión de datos que no destruyen el ancho de banda en mis entornos cuando no tiene un acceso adecuado a la infraestructura de red, que es la forma "correcta" de hacerlo.

Cuando concluya qué método utilizará, le recomiendo que visite https://superuser.com, que debería poder responder a cualquier obstáculo que pueda tener al implementar la solución.

Solución Uno.

Divídase en 2 servicios y comuníquese a través de la API REST en cada servicio o una encuesta de base de datos. Luego use un programa limitador de red para priorizar el tráfico de uno de los servicios. https://www.netlimiter.com/ y https://netbalancer.com/ son ejemplos de software que pueden hacer esto, pero hay muchos más.

Ventaja: Tendrá una aceleración dinámica de su servicio de transmisión.

Inconvenientes: tendrá que tener otro programa ejecutándose en el servidor y definitivamente no es gratis.

Solución Dos.

Use IIS, hay un acelerador incorporado en IIS https://www.iis.net/configreference/system.applicationhost/weblimits y mire maxGlobalBandWidth. Luego tienes 2 sitios web que se comunican a través de REST o una encuesta de base de datos. Ventaja: solución simple lista para usar.

Inconvenientes: sus límites no son dinámicos y están en su archivo de configuración.

Tenga en cuenta que no debe usar este método si la velocidad de su red de Internet varía mucho.