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

Preguntas similare

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


Respuesta Responder a este mensaje
#2 egcito
13/04/2005 - 05:09 | Informe spam
Gracias Isidro!

Por simplicidad opte por trabajar en forma "desconectada"...

Gracias nuevamente

Salu2!!

egcito

"Isidro Muñoz" escribió:

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
>
>




Respuesta Responder a este mensaje
#3 Luis Martinez
08/08/2005 - 22:19 | Informe spam
Puedes usar tambien esta referencia en MSDN para la aplicacion que quieres
desarrollar.
http://msdn.microsoft.com/library/d...code_2.asp

Saludos
Luis

Luis Martinez
SDET/QoS
Microsoft

"egcito" wrote in message
news:

Gracias Isidro!

Por simplicidad opte por trabajar en forma "desconectada"...

Gracias nuevamente

Salu2!!

egcito

"Isidro Muñoz" escribió:

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
>
>




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida