Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   TCPServer y TCP Client (https://www.clubdelphi.com/foros/showthread.php?t=18717)

mutabal 21-02-2005 12:57:16

TCPServer y TCP Client
 
Hola a Tod@s l@s que lean el mensaje. Tengo una aplicación cliente (TCPClient) que manda mensajes de texto a la aplicacion Servidor (TCPServer). El Objeto TcpServer me crea en el evento OnExecute un TIdPeerThread por cada conexion que establece. En este evento es donde trato el mensaje:

procedure TForm1.tcpServerExecute(AThread: TIdPeerThread);
var
texto : string;
begin
try
AThread.FreeOnTerminate:= True;
AThread.Connection.ReadTimeout := 600000;
texto := AThread.Connection.ReadLn;
if flog.produccion then Flog.AgnadirMensaje(' <= MENSAJE RECIBIDO: ' + texto + ' - (tcpServerExecute)');
TratarMensaje(texto,AThread);
except
on e: exception do
begin
if flog.produccion then Flog.AgnadirMensaje(' ** ERROR: ' + e.Message + ' - (tcpServerExecute)');
end;
end;
athread.Connection.Disconnect;
athread.Free;
end;

Pues bien, parece que todo hasta ahi está correcto, el problema viene cuando genero mensajes masivamente para probar el rendimiento del programa Servidor, y este se queda colgado como por problemas de memoria. como esta mi software, entiendo que el problema puede ser por establecer 350 conexiones en un momento y eso ocupa muchos recursos, pero limitanto esto a 15 mensaje cada vez tb ocurre. Me gustaria que alguien me diera algun consejo de como afrontar el problema porque se me estan acabando las ideas y no veo solucion aparente. Intente limitar las conexiones a 15 en MaxConnection pero conozco muy poco de este objeto para saber donde controlar sus excepciones. Tb agracederia que me dijerais donde encontrar informacion sobre este objeto de Indy. Gracias a Tod@s.

mutabal 21-02-2005 18:35:45

Hola de nuevo, tras probar muchas cosas he solucionado por lo menos unos de los problemas, el de eliminar del todo los hilos de ejecucion que ya han acabado. Era tan sencillo como parar el hilo antes de asignarle valor a la propiedad FreeOnterminate. Asi quedaria el código anterior:

procedure TForm1.tcpServerExecute(AThread: TIdPeerThread);
var
texto : string;
begin
try
athread.stop;
AThread.FreeOnTerminate:= True;
athread.start;
AThread.Connection.ReadTimeout := 600000;
texto := AThread.Connection.ReadLn;
if flog.produccion then Flog.AgnadirMensaje(' <= MENSAJE RECIBIDO: ' + texto + ' - (tcpServerExecute)');
TratarMensaje(texto,AThread);
except
on e: exception do
begin
if flog.produccion then Flog.AgnadirMensaje(' ** ERROR: ' + e.Message + ' - (tcpServerExecute)');
end;
end;
end;

Aun asi me sigue dando un problema de memoria, pero ya no es debido a esto que pregunte. Gracias a todos. Mut@b@l


La franja horaria es GMT +2. Ahora son las 01:34:43.

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