Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Limitar velocidad de subida y bajada usando idFTP (https://www.clubdelphi.com/foros/showthread.php?t=72297)

breadagast 09-02-2011 12:35:07

Limitar velocidad de subida y bajada usando idFTP
 
Hola a todos:

Necesito limitar la velocidad de subida y bajada usando el cliente FTP de los Indy 10 (TidFTP), he buscado en el foro pero no encontré nada (si no he buscado bien les pido disculpas), espero me puedan ayudar.

Muchas gracias.

breadagast 11-02-2011 10:33:36

Hola de nuevo:

Veo que nadie se anima, este tema me es de vital importancia ya que tengo una cola de subida de ficheros por este componente trabajando en segundo plano y al disponer de todo el ancho de banda la aplicación se resiente mucho a la hora de realizar las consultas SQL.

Si alguien lo ha investigado le ruego me responda, y si habeis llegado a la conclusión de que no se puede hacer con este componente os agradecería que me lo dijeseis para no perder más tiempo con el tema.

Un saludo a todos.

Neftali [Germán.Estévez] 11-02-2011 11:06:40

Es un tema complejo.
Me da la impresión de que si utilizas componentes que no implementan esa característica va a ser difícil conseguirlo.
Busca por internet por "Bandwidth throttling" que es el término que se utiliza para ello, a ver si encuentras algo.

Siento no poder darte más información.

Neftali [Germán.Estévez] 11-02-2011 11:14:27

Pues vaya ayuda la mia... :o:o
Justo estaba escribiendo el mensaje y me ha dado por buscar en las indy sobre el término throttler. :eek::eek::eek:

Resulta que las indy poseen una clase llamada TIdInterceptThrottler (de la que yo no tenía ni idea :o) y cuya descripción es:

----------------------------------------------------------------------
TIdInterceptThrottler is a TIdConnectionIntercept descendant that implements a connection intercept with the capability to restrict throughput on the connection to a target number of bits per second.

TIdInterceptThrottler provides overridden Send and Receive methods that implement bandwidth checking and preservation using the target value
indicated in BitsPerSec.
----------------------------------------------------------------------


No te aseguro que te pueda servir (porque me acabo de enterar de sus existencia :)), pero al menos tienen pinta de que va por ahí el tema.

Si avanzas sobre el tema, ya nos dirás...

Un saludo.

Neftali [Germán.Estévez] 11-02-2011 11:18:21

Por cierto, si buscas en los foros de AtozedSoftware sobre el susodicho componente, puedes encontrar cosas interesantes.

Un saludo.

breadagast 11-02-2011 11:30:15

Gracias Neftali:

Tu siempre andas por aquí. Reviso todo y de funcionar lo coloco aquí por si lo necesita alguien más.

Un saludo.

breadagast 11-02-2011 13:25:48

Ya está hecho gracias a los apuntes de Neftali.

Desde el evento "OnDataChannelCreate" del componente cliente de FTP (TidFtp) ponemos lo siguiente:

Código:


procedure TDMFtp.IdFTP1DataChannelCreate(ASender: TObject;
  ADataChannel: TIdTCPConnection);
var
  LThrottle: TIdInterceptThrottler;
  bitpsecond: integer;
begin
  bitpsecond := 30; //KB
  LThrottle := TIdInterceptThrottler.Create(ADataChannel);
  ADataChannel.IOHandler.Intercept := LThrottle;
  LThrottle.BitsPerSec := bitpsecond * 8192;
end;
procedure TDMFtp.IdFTP1DataChannelDestroy(ASender: TObject;
  ADataChannel: TIdTCPConnection);
begin
  with ADataChannel.IOHandler do
  begin
    Intercept.Free;
    Intercept := nil;
  end;
end;

bitpsecond es una variable que tengo declarada fuera del procedimiento para poder cambiar la velocidad.
La velocidad se establece por cada conexión que realiza el componente.

Un saludo y espero que os sirva a los que lo necesiteis.


La franja horaria es GMT +2. Ahora son las 17:56:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi