explorer39 escribiste:Hace tiempo que miraba ese componente, pero los ejemplos que hay no me aclaran nada.
Uhm... bueno, entender el funcionamiento general de POE no es algo trivial, pero una vez que lo haces, puedes crear aplicaciones multitareas de una manera natural, sencilla y limpia.
POE es un framework para generar aplicaciones concurrentes y multitareas, puedes verlo como un pequeño sistema operativo en Perl, tiene un Kernel, el cual es un despachador de eventos, timers, etc etc etc, tiene Filtros, Engranes, Componentes, todo lo necesario para ensamblar tus aplicaciones. Los Componentes son los elementos de mas alto nivel, generalmente los que los usuarios comparten con alguna funcionalidad específica ( en este caso Server::TCP y Client::TCP ).
Es necario visitar la página del proyecto
POE para revisar la documentación necesaria y sobre todo es recomendado checar el cookbook con ejemplos funcionales.
explorer39 escribiste:No es costosa en este caso, porque los ficheros xml a leer son de menos de 200 bytes.
Bueno es costoso no por la cantidad de bytes a leer, sino porque normalmente las funciones de I/O a bajo nivel son COSTOSAS en cuanto a las llamadas al sistema ( aun se utilice stdio ), rendimiento, etc.
Normalmente en aplicaciones de red, comenté que es necesario para evitar el estancamiento, utilizar forks o threads o alguna técnica que permita que una vez que se establece una conexión, sea otro ente en ejecución quien atienda a dicho cliente, así el servidor quedará libre para otra petición. Si las peticiones del cliente hacia el servidor son esporádicas, entonces no es necesario lo anterior.
explorer39 escribiste:No... voy a intentar explicarlo bien.
* El servidor queda esperando en un puerto.
* Un cliente se conecta.
* El servidor lee de un directorio los ficheros XML que tiene que enviar. Escoje el más viejo. Lo empaqueta en zip. Le agrega una cabecera de 4 bytes 0 al principio, y lo manda al cliente (todo).
* El servidor queda a la espera de la respuesta.
* El cliente debe recibir el envío, descomprimir el zip y verificar que todo está bien (xml y zip).
* Si todo está bien, responde con 4 bytes 0 al servidor.
* Si algo anda mal, responde con 4 bytes, siendo el último de ellos un 1 o un 2 dependiendo del tipo de fallo.
* El cliente queda otra vez a la escucha.
* El servidor, al recibir la respuesta de 4 bytes 0, debe descartar el XML que envió, pues se envió bien.
* Si en cambio se reciben 4 bytes que no son 0, entonces debe repetir el proceso de búsqueda y envío.
* El bucle de envío de ficheros se debe hacer hasta que no haya más. En ese momento, si el cliente sigue conectado, nos quedamos a la espera de tener más xml que mandar.
Me suena que la solución puede ser muy sencilla, pero lo que necesitaba es un ejemplo de un servidor que sea capaz tanto de enviar como de recibir información del cliente.
Gracias!
Okas ya entendí tu caso, pero sería bueno que mejor mostraras lo que llevas hecho para poder ayudarte, no tengo yo alguna aplicación a la mano que pueda mostrarte o ejemplo completo con tu caso, pero el ejemplo es el clásico Espera-Conecta-Atiende(fork)-Espera. Si POE no te viene al inicio, entonces intenta hacerlo primero con el módulo Socket directamente.
Saludos,