• Publicidad

Enviar y recibir información a través de IO::socket

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Notapor AkonD » 2006-08-28 10:22 @474

Lo que se hace en este ejemplo es leer el socket y el STDIN con el módulo IO::Select sin tener que usar fork. Al recorrer el array que genera $select->can_read comprueba si se trata del STDIN o el socket y lanza la función lectura_stdin o lectura_socket según corresponda.

Puedes encontrar la documentación del módulo en http://search.cpan.org/author/GBARR/IO- ... /Select.pm
AkonD
Perlero nuevo
Perlero nuevo
 
Mensajes: 50
Registrado: 2005-10-06 06:36 @316
Ubicación: España

Publicidad

Notapor Perl user » 2006-08-28 11:01 @500

En realidad select(2) y su implementación en Perl hacen mas qué solo retornarte eso.

La syscall select es una llamada bloqueante la cual te permite "inspeccionar" file descriptors ( en Perl, te permite inspeccionar file handlers ). Ahora siguiente el ejemplo de Perl, una vez teniendo la lista de FH's a inspeccionar, select espera que el kernel le indique que uno de ellos está listo para leer/escribir o con una condición excepcional.

Esta técnica es muy utilizada para servidores de alto rendimiento en conjunto con Threading o Forking servers, puesto que en vez de estar revisando esos FH's manualmente con un poll, el sistema lo hace por tí. Una vez teniendo cual FH vas a atender, normalmente un thread o un proceso diferente, puede manejar la conexiòn hacia él.

Es interesante ver todas las opciones que tienes para hacer I/O sobre streams ( como sockets ), pero una de las mas eficientes en cuanto a la cantidad de conexiones a atender es esta, es decir, la unión de Multiplexed I/O( o sea el uso de select ), y threads o forks.

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Anterior

Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 0 invitados

cron