Duda con Sockets sincrono y asincrono ..

Iniciado por llAudioslavell, 7 Enero 2012, 23:17 PM

0 Miembros y 1 Visitante están viendo este tema.

llAudioslavell

hola bueno soy yo denuevo con mis dudas.... necesito tener todo claro para poder terminar perfectamente mi aplicacion cliente-servidor:

Socket sincriono:
-sockets que se bloquean hasta que han recibido toda la información  
-En este tipo de socket, cuando haces una llamada para recibir, por ejemplo, la llamada a la funcion no termina hasta que recibe los datos, esto puede cogelar tu aplicacion.

Socket asincrono
sockets que no se bloquean y tenemos q ver si nuestro buffer se ha llenado.

He aqui, he citado las definiciones de algunos usuarios, las mas claras, creo yo, pero creo haber entendido solo poco y quisiera que alguien de ustedes me explicara un poco mejor todo lo que he citado y me respondan algunas dudas:

-Con respecto a Socket sincriono:
- ¿ Que quiere decir con: Socket que se bloquean ?
- "hasta que han recibido toda la informacion" ¿ Esto se refiere que el mensaje que envio el cliente al servidor, ha llegado sin ningun problema ?

- "En este tipo de socket, cuando haces una llamada para recibir, por ejemplo, la llamada a la funcion no termina hasta que recibe los datos, esto puede cogelar tu aplicacion.", todo esto quiere decir que el cliente o servidor se  cuelga una vez que se alla recibido el mensaje (datos) ???

Con respecto a Socket asincrono:
- ¿ a que le llama buffer, que Clase en VB.NET es  y como funciona este ?

- y por ultimo.... normalmente cual de estos metodos es mas usado en la actualidad y por que... hay alguna ventaja ???

Se los agradeceria muchisimo ... no crean que quiero todo resuelto...estoy leendo bastante pero me complico un poco con el tiempo por mis otras labores..

Muchas Gracias
Salu2""

llAudioslavell

Espero anciosamente respuestas....  estoy leendo mas y cada vez mas tengo mas dudas  :-\  y no encuentro soluccion en Internet ....
Gracias..   :)
Salu2 !!!

Novlucker

Cita de: Audioslave™ en  7 Enero 2012, 23:17 PM
-Con respecto a Socket sincriono:
- ¿ Que quiere decir con: Socket que se bloquean ?
- "hasta que han recibido toda la informacion" ¿ Esto se refiere que el mensaje que envio el cliente al servidor, ha llegado sin ningun problema ?
Quiere decir que tu aplicación irá ejecutando hasta que espere información, luego de lo cual se detendrá y quedará a la espera de recibir esa información.

Cita de: Audioslave™ en  7 Enero 2012, 23:17 PM
- "En este tipo de socket, cuando haces una llamada para recibir, por ejemplo, la llamada a la funcion no termina hasta que recibe los datos, esto puede cogelar tu aplicacion.", todo esto quiere decir que el cliente o servidor se  cuelga una vez que se alla recibido el mensaje (datos) ???
Lo mismo de antes, hasta recibir todos los datos no sigue.

Cita de: Audioslave™ en  7 Enero 2012, 23:17 PM
Con respecto a Socket asincrono:
- ¿ a que le llama buffer, que Clase en VB.NET es  y como funciona este ?
Por ejemplo un array de bytes en el cual irías almacenando la información a medida que llega.

En el primer caso, la aplicación se bloquea y no sigue hasta bien reciba toda la información. En el segundo caso, la aplicación sigue y va actuando a medida que recibe la información. Una "dice" ... "espero a recibir la información para seguir", y la otra ... "a medida que llegue la información, me vas avisando".

Cita de: Audioslave™ en  7 Enero 2012, 23:17 PM
- y por ultimo.... normalmente cual de estos metodos es mas usado en la actualidad y por que... hay alguna ventaja ???
Depende de lo que estés buscando en tu aplicación, en algunos casos se hará uso de sockets sincrónicos, en otros asincrónicos, y en otros incluso sincrónicos y threads :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

llAudioslavell

Cita de: Novlucker en  9 Enero 2012, 13:26 PM
Quiere decir que tu aplicación irá ejecutando hasta que espere información, luego de lo cual se detendrá y quedará a la espera de recibir esa información.
Lo mismo de antes, hasta recibir todos los datos no sigue.
Por ejemplo un array de bytes en el cual irías almacenando la información a medida que llega.

En el primer caso, la aplicación se bloquea y no sigue hasta bien reciba toda la información. En el segundo caso, la aplicación sigue y va actuando a medida que recibe la información. Una "dice" ... "espero a recibir la información para seguir", y la otra ... "a medida que llegue la información, me vas avisando".
Depende de lo que estés buscando en tu aplicación, en algunos casos se hará uso de sockets sincrónicos, en otros asincrónicos, y en otros incluso sincrónicos y threads :P

Saludos


Exelente aclaracion..... ahora comprendo mejor las cosas... pero me quede en duda sobre tu ultima explicacion......... cuales son esos casos especificos ??? disculpa por tantas preguntas..  nuevamente aclaro que soy Novato ^^

CATBro

Se puede decir que los sockets asincronos, permiten que los metodos que usen tus sockets, funcionen por asi decirlo con "hilos integrados", actuan como sockets y hilos al mismo tiempo por asi explicarlos, los asincronos evitan que uses hilos en tus sockets.

Casos:
CASO#1:
Usando sockets sincronos sin hilos.
Por ejemplo: Alguien te da una lista de tareas por hacer, jejje bueno..
1.Caminar 10Kilometros
2.Respirar
3.Descansar

Usando sockets sincronos sin hilos , primero tendrias que caminar 10kilometros y ya recorrido los 10 kilometros, recien empezar a respirar, mientras no cumplas por asi decirlo el primer metodo, o tarea, no puedes respirar

CASO#2
Usando sockets sincronos con hilos
Ejmplo:Alguien te una lista de tareas igual a la de arriba
1.Caminar 10Kilometros
2.Respirar
3.Descansar

Podrias poner la tarea de respirar en un hilo, y al mismo tiempo en que cumples con la tarea de caminar los 10 kilometros puedes respirar

CASO#3
Usando sockets asincronos
Ejemplo: La mima lista de arriba de cosas por hacer

Puedes hacer todo al mismo tiempo

No se si me di a entender

Otro ejemplo pero en un servidor
El servidor de tu chat,recive informacion en cualquier momento, pero no sabes en que momento puede llegarle el mensaje, pero mientras espera esa informacion, talvez quieres que haga otra cosa, puede que al servidor de tu chat quieras que tambien de hay tu puedas tecelar un mensaje y mandarlo a otro usuario.
Por lo tanto tienes dos opciones usar sockets sincronos e hilos, o sockets asincronos.

No se si me di a entender
Saludos


llAudioslavell

Cita de: CATBro en 10 Enero 2012, 00:24 AM
Se puede decir que los sockets asincronos, permiten que los metodos que usen tus sockets, funcionen por asi decirlo con "hilos integrados", actuan como sockets y hilos al mismo tiempo por asi explicarlos, los asincronos evitan que uses hilos en tus sockets.

Casos:
CASO#1:
Usando sockets sincronos sin hilos.
Por ejemplo: Alguien te da una lista de tareas por hacer, jejje bueno..
1.Caminar 10Kilometros
2.Respirar
3.Descansar

Usando sockets sincronos sin hilos , primero tendrias que caminar 10kilometros y ya recorrido los 10 kilometros, recien empezar a respirar, mientras no cumplas por asi decirlo el primer metodo, o tarea, no puedes respirar

CASO#2
Usando sockets sincronos con hilos
Ejmplo:Alguien te una lista de tareas igual a la de arriba
1.Caminar 10Kilometros
2.Respirar
3.Descansar

Podrias poner la tarea de respirar en un hilo, y al mismo tiempo en que cumples con la tarea de caminar los 10 kilometros puedes respirar

CASO#3
Usando sockets asincronos
Ejemplo: La mima lista de arriba de cosas por hacer

Puedes hacer todo al mismo tiempo

No se si me di a entender

Otro ejemplo pero en un servidor
El servidor de tu chat,recive informacion en cualquier momento, pero no sabes en que momento puede llegarle el mensaje, pero mientras espera esa informacion, talvez quieres que haga otra cosa, puede que al servidor de tu chat quieras que tambien de hay tu puedas tecelar un mensaje y mandarlo a otro usuario.
Por lo tanto tienes dos opciones usar sockets sincronos e hilos, o sockets asincronos.

No se si me di a entender
Saludos



Exelente amigo .. disculpame por no darte las gracias antes,.. es que no pude ya conectarme por falta de tiempo bueno exelente hermano !!!!!

Entonces los socket asincrono me dejan recibir informacion(mensaje) de cualquier cliente en cualquier  momento  ....   pero una duda, que Clases en .NET se utiliza para este caso.. y que clases se utiliza con el metodo de socket sincrono

Espero respuestas hermanos ^^

TomaSs

Aprovecho este hilo para hacer una pregunta sobre el tema.
Para un chat, el cual recibirá información en cualquier momento, qué sería más eficiente? el método sincrono con hilos o el método asincrono?

gracias!

kub0x

Cita de: Audioslave™ en 21 Enero 2012, 16:48 PM
que Clases en .NET se utiliza para este caso.. y que clases se utiliza con el metodo de socket sincrono

TcpClient para la implementación cliente y TcpServer para la parte del servidor. Estas dos clases son muy fáciles de emplear, aunque yo prefiero utilizar la Clase Sockets, pues TcpClient/Server están basadas en la última.

Cita de: TomaSs en 14 Enero 2013, 07:04 AM
Aprovecho este hilo para hacer una pregunta sobre el tema.
Para un chat, el cual recibirá información en cualquier momento, qué sería más eficiente? el método sincrono con hilos o el método asincrono?
gracias!

En mi opinión usaría sockets asíncronos, pues en un Chat te interesa enviar mensajes mientras los recibes, es decir, multi-tarea (enviar/recibir). Si lo implementaras bajo Sockets sincronos pues estarías esperando la llegada de información (paquetes) del otro extremo y bloquearías el proceso hasta que recibieras los datos. Todo depende del uso o implementación que quieras dar.

Saludos!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


TomaSs

Cita de: kub0x en 14 Enero 2013, 17:10 PM
En mi opinión usaría sockets asíncronos, pues en un Chat te interesa enviar mensajes mientras los recibes, es decir, multi-tarea (enviar/recibir). Si lo implementaras bajo Sockets sincronos pues estarías esperando la llegada de información (paquetes) del otro extremo y bloquearías el proceso hasta que recibieras los datos. Todo depende del uso o implementación que quieras dar.

Saludos!

Pero por lo que yo he podido comprobar, con varios hilos también te permite estar recibiendo en un hilo, y enviar en otro hilo, no es así?

kub0x

Exacto. Podrías correr en un hilo el proceso de recibo de mensajes, de esta forma no bloquearía el hilo principal. El proceso de envio de mensaje los podrías implementar perfectamente en el hilo principal de la aplicación. Los métodos asíncronos utilizan funciones CallBack (de llamada) que  permiten continuar con la ejecucción del código mientras se ejecutan las instrucciones de dichas funciones de llamada.

Saludos!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate