Problema con comunicación entre socket

10 views
Skip to first unread message

Pablo Javier Mur

unread,
Nov 4, 2020, 10:19:31 PM11/4/20
to ClubSmalltalk
Hola,

tengo 2 aplicaciones escritas en Dolphin SmallTalk 7.1.14 que se comunican por socket. Para enviar datos utilizo el siguiente objeto:


(STBOutFiler on: socket writeStream) que se mantiene vivo durante toda la comunicación.


Para recibir datos utilizo el siguiente objeto:


((STBValidatingInFiler on: socket readStream)

validationBlock: [:className | true];

yourself) el cual también se mantiene vivo durante toda la conexión.


El problema es que las aplicaciones pueden estar conectadas durante horas y se envían objetos todo el tiempo. Los objetos STBFiler tienen atributos writeMap y readMap respectivamente los cuales va registrando todos los objetos que se reciben o envían lo cual hace que acumulen miles de instancias que no se usan pero no se eliminan porque están referenciadas por esos atributos. Eventualmente, en algún momento las aplicaciones caen. ¿Estoy haciendo algo mal? Les agradecería si pueden decirme si debo cambiar algo para no acumular objetos que deberían ser eliminados.

Saludos y muchas gracias.

Carlos E. Ferro

unread,
Nov 5, 2020, 7:16:56 AM11/5/20
to clubsm...@googlegroups.com
¿Por qué mantener vivas las mismas instancias de STBFiler todo el tiempo?
Esos objetos no son costosos de crear, es más fácil crear uno para cada objeto transmitido. Cuando terminas de leer o escribir, ese filer muere y la siguiente vez, creas otro.

Si no, lo que deberías hacer es "resetear" los maps cuando tengas un idle time (cuando no estés leyendo o escribiendo objetos).

Sin mirar más el código, es lo que se me ocurre, a alto nivel.
Suerte
--
--
To post to this group, send email to clubSm...@googlegroups.com
To unsubscribe from this group, send email to clubSmalltal...@googlegroups.com
 
http://www.clubSmalltalk.org
---
Has recibido este mensaje porque estás suscrito al grupo "ClubSmalltalk" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a clubsmalltal...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/clubsmalltalk/7b016f99-8e31-4456-8dd9-f4efb74c16f2n%40googlegroups.com.


--

carlos e. ferro | senior developer caesar systems

cefer...@gmail.com

Pablo Javier Mur

unread,
Nov 5, 2020, 2:30:38 PM11/5/20
to ClubSmalltalk
Muchas gracias por tu respuesta Carlos, voy a probar creando un STBOutFiler y STBValidatingInFiler  para cada envío y recepción de mensaje.
Hasta Luego

Juan

unread,
Nov 5, 2020, 3:06:02 PM11/5/20
to clubsm...@googlegroups.com
Hola te comento entre líneas,


El jue., 5 de nov. de 2020 4:30 PM, Pablo Javier Mur <pjav...@gmail.com> escribió:
Muchas gracias por tu respuesta Carlos, voy a probar creando un STBOutFiler y STBValidatingInFiler  para cada envío y recepción de mensaje.
Hasta Luego

El jueves, 5 de noviembre de 2020 a la(s) 09:16:56 UTC-3, Carlos Ferro escribió:
¿Por qué mantener vivas las mismas instancias de STBFiler todo el tiempo?
Esos objetos no son costosos de crear, es más fácil crear uno para cada objeto transmitido. Cuando terminas de leer o escribir, ese filer muere y la siguiente vez, creas otro.

Si no, lo que deberías hacer es "resetear" los maps cuando tengas un idle time (cuando no estés leyendo o escribiendo objetos).

Sin mirar más el código, es lo que se me ocurre, a alto nivel.
Suerte

On 5/11/2020 00:19, Pablo Javier Mur wrote:
Hola,

tengo 2 aplicaciones escritas en Dolphin SmallTalk 7.1.14 que se comunican por socket. Para enviar datos utilizo el siguiente objeto:


(STBOutFiler on: socket writeStream) que se mantiene vivo durante toda la comunicación.


Para recibir datos utilizo el siguiente objeto:


((STBValidatingInFiler on: socket readStream)

validationBlock: [:className | true];


No conozco exactamente tu app pero e; el Stbxxx se usa [ara serializar pero me parece que es más eficiente otros métodos, 
El validación es para saber si ;a clase existe en la imagen destino, una forma de hacer esto sería 
Smalltalk at: classname ifAbsent:[ self error: 'clase ',className no existe en esta imagen'].
No tengo acá la imagen [ero estoy seguro que Dp7 tiene el framework ston u. Otros seríalizadores.
Saludos
Desde el CEL
Juan Diaz Cortez

yourself) el cual también se mantiene vivo durante toda la conexión.


El problema es que las aplicaciones pueden estar conectadas durante horas y se envían objetos todo el tiempo. Los objetos STBFiler tienen atributos writeMap y readMap respectivamente los cuales va registrando todos los objetos que se reciben o envían lo cual hace que acumulen miles de instancias que no se usan pero no se eliminan porque están referenciadas por esos atributos. Eventualmente, en algún momento las aplicaciones caen. ¿Estoy haciendo algo mal? Les agradecería si pueden decirme si debo cambiar algo para no acumular objetos que deberían ser eliminados.

Saludos y muchas gracias.

--
--
To post to this group, send email to clubSm...@googlegroups.com
To unsubscribe from this group, send email to clubSmalltal...@googlegroups.com
 
http://www.clubSmalltalk.org
---
Has recibido este mensaje porque estás suscrito al grupo "ClubSmalltalk" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a clubsmalltal...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/clubsmalltalk/7b016f99-8e31-4456-8dd9-f4efb74c16f2n%40googlegroups.com.


--

carlos e. ferro | senior developer caesar systems

cefer...@gmail.com

--
--
To post to this group, send email to clubSm...@googlegroups.com
To unsubscribe from this group, send email to clubSmalltal...@googlegroups.com
 
http://www.clubSmalltalk.org
---
Has recibido este mensaje porque estás suscrito al grupo "ClubSmalltalk" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a clubsmalltal...@googlegroups.com.

Juan

unread,
Nov 5, 2020, 3:28:18 PM11/5/20
to clubsm...@googlegroups.com
Perdón corrijo el código del email anterior
validationBlock: [:className |

Smalltalk at:className ifAbsent:[ ^self error:'clase  ',className, ' ausente en el image'.].
true.].


Pablo Javier Mur

unread,
Nov 7, 2020, 2:15:18 PM11/7/20
to ClubSmalltalk
dale, gracias por la respuesta. Voy a proceder como puse más arriba.
Saludos
Reply all
Reply to author
Forward
0 new messages