duda socket

12/04/2005 - 05:44 por egcito | Informe spam
hola a todos!

estoy armando una pequeña aplicacion cliente/servidor con sockets. el
servidor esta armado en aix y los clientes en windows.
la cosa es sencilla, el servidor aix escucha en un socket y cuando le llega
una peticion se lanza un nuevo proceso (fork) en donde se conversa con el
cliente.
luego de la conexion, la conversacion es simple: el envio de un comando y su
respuesta por parte del servidor.
mi duda es la siguiente; ¿conviene tener abierto siempre el canal de
comunicacion (socket cliente y servidor) entre "charla" y "charla"? ¿o es
mejor abrir el canal, "conversar" y cerrar?
el tema es que la conexion no es muy rapida entre cliente y servidor y al
conectarse se tarda un tiempito, luego al tener el canal ya abierto la cosa
se pone un poco mas rapida...
la desventaja que tengo es que como utilizo timeout en los clientes, si se
produce un timeout (no por desconexion sino porque la respuesta tardo mucho),
y dejo el socket abierto para seguir utilizandolo... tengo problemas de
sincronizacion ya que al enviar el proximo mensaje puede ser que tenga en el
buffer de respuesta datos de lo que anteriormente habia dado timeout...
(espero se entienda)

realmente me gustaria saber cual es la mejor forma de trabajar en estos
casos y si es posible ver de donde obtener algo de info

desde ya mil gracias

egcito
 

Leer las respuestas

#1 Isidro Muñoz
12/04/2005 - 18:42 | Informe spam
Hola,

Realmente no sé cual es la mejor, dependerá de tus necesidades. Lo que si te
puedo decir que por ejemplo en un navegador web, tipo internet explorer la
conexión se abre y cierra cada vez que solicitas una pagina web, o sea, que
abre y cierra socket cada vez que se baja un fichero html.

Sin embargo en un servidor sql, creo que el socket se queda abierto mientras
estás trabajando. O sea, hay un inicio de conexión y un cierre, pero no cada
vez que solicitas un comando.

De todos modos pienso que el problema que tienes de timeout y todo lo que se
queda como basura eso es problema de tu propio protocolo, tendrás que
diseñar un protocolo que tenga en cuenta que pueda ocurrir todo esto. Numera
los comandos por una secuencia de números, y las respuestas que lleven el
número de comando, si da un time out anulas ese numero de comando y todas
las respuestas que vengan no las tengas en cuenta, en fin, es una idea.

Saludos.
Isidro.

"egcito" escribió en el mensaje
news:

hola a todos!

estoy armando una pequeña aplicacion cliente/servidor con sockets. el
servidor esta armado en aix y los clientes en windows.
la cosa es sencilla, el servidor aix escucha en un socket y cuando le


llega
una peticion se lanza un nuevo proceso (fork) en donde se conversa con el
cliente.
luego de la conexion, la conversacion es simple: el envio de un comando y


su
respuesta por parte del servidor.
mi duda es la siguiente; ¿conviene tener abierto siempre el canal de
comunicacion (socket cliente y servidor) entre "charla" y "charla"? ¿o es
mejor abrir el canal, "conversar" y cerrar?
el tema es que la conexion no es muy rapida entre cliente y servidor y al
conectarse se tarda un tiempito, luego al tener el canal ya abierto la


cosa
se pone un poco mas rapida...
la desventaja que tengo es que como utilizo timeout en los clientes, si se
produce un timeout (no por desconexion sino porque la respuesta tardo


mucho),
y dejo el socket abierto para seguir utilizandolo... tengo problemas de
sincronizacion ya que al enviar el proximo mensaje puede ser que tenga en


el
buffer de respuesta datos de lo que anteriormente habia dado timeout...
(espero se entienda)

realmente me gustaria saber cual es la mejor forma de trabajar en estos
casos y si es posible ver de donde obtener algo de info

desde ya mil gracias

egcito


Preguntas similares