Conexión Multisocket en PERL

SeiYa

Buenas ... se programar sockets en perl para aplicaciones cliente servidor 1:1 pero no tengo ni idea y me gustaría realizar aplicaciones cliente servidor n:1 es decir 1 solo servidor y un número indefinido de clientes.

Si alguien conoce alguna forma (que las hay claro está) pero mejor, si conoce algún tutorial, ejemplo o cualquier cosa que pueda ayudarme ... se lo agradeceré.

Un saludo!

kas

Una de las tecnicas mas cool, es desarrollar un servidor basado en 2 clases:

  • Servidor (server)
  • Gestor de cliente individual (client)

La clase server escucha por un puerto, le llega una conexion, y lo que hace es crear una nueva instancia de la clase client pasandole el nuevo socket (por referencia).

El servidor almacena este cliente conectado en una hashtable (ip, clase) y vuelve a escuchar por el puerto. Esto es necesario para conocer los clientes conectados. Obviamente, cuando un cliente desconecte, será eliminado de la hashtable.

Por su parte, el constructor de la clase client, se guarda el socket pasado por referencia, y arranca un subproceso separado para la recepcion de datos. La clase tambien tiene una funcion publica para enviar datos.

No conozco perl, pero yo tengo implementado el servidor asi, y queda muy muy bien.

Para saber si se han recibido datos o el cliente ha desconectado, lo mas normal es usar eventos, cazados tanto por el servidor como por la aplicacion que haga uso de el.

Espero que esto te ayude. Si quieres, el martes puedo postear el codigo del server que tengo hecho en C#, a ver si te sirve de ayuda.

SeiYa

#2 Así implementé yo los servidores cuando trabajé con VB, porque por eventos es muy fácil hacerlo, pero en perl funciona totalmente distinto, como no empiece metiendo hilos o usando el fork eso se ejecuta en cascada ...

Pero bueno, ya conseguí una forma, si a alguien le interesa que lo diga y ya lo explico un poco mejor.

Un saludo.

kas

Pues seria un detalle que explicaras como lo has solucionado, almenos la vision general.

Supongo que podras hacer servir una tabla de hash y al fork pasarle un identificador para saber donde tiene el socket abierto, o algo pro el estilo..

Usuarios habituales

  • kas
  • SeiYa