Fórum Indy com lentidão #285469
21/06/2005
0
Aew... eu estou desenvolvendo uma aplicação onde eu envio 150 bytes atravez da rede. Meu programa funcionava perfeitamente com o delphi 5 e o component TSocket. Porem qdo eu migrei para o delphi 7 eu gostei mto da paleta Indy e a forma que os components de conexao trabalham!!! so estou tendo um probleminha: ao enviar esses 150 bytes (considero mto poucos bytes) a msg demora mais ou menos 10 segundos trabalhando com o ip 127.0.0.1 eu nem imagino o que aconteceria com um servidor com umas 1000 conexoes simultaneas! para o envio de ate 20 byte eh mto rapido. mais passou disso.
Eu faço da seguinte forma:
O cliente envia uma solicitação e espera a resposta e os dados:
e o servidor recebe no evento OnExecute e envia os dados pedidos:
O codigo funciona perfeito mais na ultima linha demora uns 15 segundos.
Se alguem souber o que esta acontecendo por favor me ajude!
t+
Eu faço da seguinte forma:
O cliente envia uma solicitação e espera a resposta e os dados:
idTCPClient1.WriteLn(#0); //onde 0 e o id da solicitacao Buffer := idTCPClient1.ReadString(5); Move(Buffer[1], vOperacao, 1); Move(Buffer[2], LenBuffer, 4); if vOperacao <> 0 then Abort; Buffer := idTCPClient1.ReadString(LenBuffer); // Nessa linha que fica lento
e o servidor recebe no evento OnExecute e envia os dados pedidos:
AThread.Conections.WriteLn(#0 + LenBuffer + Buffer) // onde buffer eh os dados q eu envio
O codigo funciona perfeito mais na ultima linha demora uns 15 segundos.
Se alguem souber o que esta acontecendo por favor me ajude!
t+
Crash
Curtir tópico
+ 0
Responder
Posts
21/06/2005
Massuda
Ao invés de usar WriteLn no servidor, experimente fazer o seguinte (não testei):O OpenWriteBuffer/CloseWriteBuffer faz com que o buffer de saída seja transmitido imediatamente ao invés de ser bufferizado.
var Stream: TStringStream; ... Stream := TStringStream.Create(#0 + LenBuffer + Buffer) try with AThread.Conections do begin OpenWriteBuffer; try; WriteStream(Stream); CloseWriteBuffer; except CancelWriteBuffer; // talvez precise tratar o erro end; end; finally Stream.Free; end; ...
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)