Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-02-2005
mutabal mutabal is offline
Registrado
 
Registrado: feb 2005
Posts: 2
Poder: 0
mutabal Va por buen camino
Exclamation 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.

Última edición por mutabal fecha: 21-02-2005 a las 12:58:35. Razón: Corregir
Responder Con Cita
  #2  
Antiguo 21-02-2005
mutabal mutabal is offline
Registrado
 
Registrado: feb 2005
Posts: 2
Poder: 0
mutabal Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:20:39.


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
Copyright 1996-2007 Club Delphi