¿Qué son los zócalos Async? ¿Cómo son diferentes de los enchufes normales (bloqueo y no bloqueo)?¿Qué son los zócalos Async?
Cualquier apunta en esa dirección o cualquier enlace a tutoriales será útil.
Gracias.
¿Qué son los zócalos Async? ¿Cómo son diferentes de los enchufes normales (bloqueo y no bloqueo)?¿Qué son los zócalos Async?
Cualquier apunta en esa dirección o cualquier enlace a tutoriales será útil.
Gracias.
Hay tres maneras de comunicarse con tomas en modo asíncrono:
toma regular de abierto, pero no leen de ella (porque read()
bloques) hasta que sepa que hay algo que leer. Puede usar select()
o poll()
para verificar si hay datos para leer desde el socket (s), y si hay algo, léalo, ya que read()
no se bloqueará.
Cambie el socket a la E/S sin bloqueo, estableciendo O_NONBLOCK
con la función fcntl()
. En este caso, read()
no bloqueará.
O_ASYNC
bandera de llaves de vaso usando FIOASYNC
opción de ioctl()
(ver man 7 socket
para más detalles). En este caso, recibirá la señal SIGIO
cuando haya algo que leer en el zócalo.
Third approach is async socket.
Si un servidor usa un socket síncrono, mientras espera datos del cliente, su hilo principal está bloqueado, por lo que el servidor no hará nada ... eso es malo si tiene varios clientes conectados. En un socket asíncrono, PUEDE hacer otras cosas mientras espera que el cliente le envíe datos, por lo que ahora PUEDE tener varios clientes conectados
Synchronous usa una función como receive() que bloquea hasta que recibe un mensaje
Asincrónico tiene beginReceive() endReceive() o funciones similares. Utiliza las devoluciones de llamada, cuando se recibe un mensaje, la devolución de llamada se invoca
Comparación de las siguientes cinco modelos diferentes para I/O en UNIX Network Programming: The sockets networking API sería útil:
bloqueo
sin bloqueo
I/O multiplexación
impulsado por la señal I/O
E/S asíncrona
Th También hay, probablemente, otras formas específicas de plataforma para utilizar sockets de forma asíncrona, como el uso de E/S superpuestas y puertos de finalización de E/S en plataformas Windows. –
@Len Sure. Incluso estos no son multiplataforma, ya que 'fcntl()' puede tener diferentes opciones en diferentes plataformas, y 'ioctl()' no es estándar y depende en gran medida de la plataforma. – qrdl
¿Hay una opción independiente de plataforma? – Juan