[Python] 1 Servidor, muchos clientes.

xCoNDoR

Hola programadores,

Es la primera vez que se me plantea hacer algo de este calibre, y llevo con python muy poco tiempo aún, por lo que vengo a pediros consejo:

Necesito una aplicación Servidor alojada en un Servidor dedicado contratado, que esté 24h corriendo, y sea capaz de tener conectados varios clientes a el, digamos que continuamente transmitiendo información y actuando sobre una base de datos.

Los Sockets de toda la vida son la solución ?

A que me estoy enfrentando ?

Como de estable será ?

Cualquier información o experiencias con un tema así me valdrán de ayuda.

Saludos.

Soltrac

No te valen web services?

1 respuesta
dr_Rouman

¿Cómo te vas a conectar al servidor? ¿Cómo es el volumen de información?

En Python te puedes montar un servidor multihilo de sockets de toda la vida con bastante facilidad, pero es un poco bestia xD

1 respuesta
LOc0

Yo encapsularía la comunicación con HTTP y tiraría de APACHE + mod_python para ahorrarme dolores de cabeza. Si no, pues sockets+threads.

Salu2 ;)

1 respuesta
xCoNDoR

#2 #3 #4

Gracias por las respuestas, os cuento un poco más.

La idea es que en cualquier momento, el servidor pueda mandar una orden a cualquier cliente, para que este actúe en consecuencia, por lo que creo que me supone mantener la conexión viva en todo momento.

Pensé a vote pronto que los clientes podrian estár a la escucha del servidor, esperando que este se conecte a ellos para mandar la orden, pero no es posible por el tema de ip's dinamicas, routers, puertos, etc..

La solución debería ser capaz de aguantar unos 100 clientes a la larga, y el tipo de datos a enviar, digamos que podría compararse a un simple chat.

En un primer momento, yo tenía pensado no utilizar servidor, haciendo que los clientes conectaran a una bd mysql, almacenaran los datos y el servidor los leía de allí, pero ahora me piden que el servidor, también puda actuar sobre cualquier cliente por lo que me destroza la idea. A no ser que el servidor escribiera en la bd, y los clientes estubieran periodicamente leyendola para obtener, digamos, la orden o respuesta... (¿ No es muy chapuza ?)

Gracias por vuestro tiempo e ideas.

LOc0

Échale un vistazo a esto: http://en.wikipedia.org/wiki/Push_technology

http://www.google.es/url?sa=t&rct=j&q=flash%20xmlsocket%20push&source=web&cd=6&ved=0CE8QFjAF&url=http%3A%2F%2Fswerl.tudelft.nl%2Ftwiki%2Fpub%2FMain%2FSpciProject%2Freport-Engin-final.pdf&ei=khjeTsWnMtHFswbCzJzpCA&usg=AFQjCNGNjsu6IqWXThmOIZgqKbskhZDsOg&cad=rja

Salu2 ;)

1 respuesta
Zeroner

Usa tornado con websockets, sin duda.
Ejemplo: https://github.com/facebook/tornado/tree/master/demos/websocket

1 respuesta
xCoNDoR

#7

La aplicación cliente, no debe (o no debería) ser una aplicación web, sino una aplicación fisica (en un terminal, p.e), es tornado una solución ?

1 respuesta
BLZKZ

#8 para lo que pides creo que lo de #6 (push) es la mejor solución sin duda

1 respuesta
xCoNDoR

#9 Como le acabo de comentar a (#)7, creo que una aplicación web por el lado del cliente, no es la solución, creo, ya que necesito que el PC cliente, tenga la aplicación ejecutada 24/7, y conectada al servidor esperando ordenes.

Si bién push estaría genial (al estilo iPhone y tal), no tengo información sobre su uso fuera del entorno web.

Si estoy equivocado, podrias darme algo de luz en el tema ?

Gracias!

1 respuesta
BLZKZ

#10 creo que te confundes con lo de push. Las notificaciones push consisten en un servidor que cada vez que ocurre un eveto le manda peticion a la aplicacion cliente. La app cliente no suele ser web, y no tiene por qué haber una aplicación web.

Gmail la usa para android, tuenti, twitter... y no, yo no tengo la obligación de saber que existe aplicación web, puesto que me registro y accedo al contenido desde la app cliente que tengo instalada en mi telefono, asi que te estás confundiendo.

Edit: ojo me refiero simplemente a push, nada de tecnologías en si como tornado que de hecho la desconozco.

1 respuesta
xCoNDoR

#11 Que recursos tengo para realizar la tarea de Push ? No me lo deja claro la Wikipedia.
Algun enalce de interés donde pueda aprender algo sobre esto ?

Gracias de nuevo

2 respuestas
BLZKZ

#12 ea! buena pregunta, yo estoy ahora mirandolo para una app que tengo en camino para android, pero de python ni zorrisima xD

LOc0

#12 Push no es más que un socket TCP abierto entre el cliente y el servidor. Míra aquí: http://chuwiki.chuidiang.org/index.php?title=Sockets_en_Python

Podrías tener dos hilos en el servidor. Uno que acepte conexiones entrantes, abra el socket y guarde el descriptor en una lista y otro hilo que se encargue de la "chicha" del programa y cuando tenga que comunicar algo a algún cliente busque en la lista de sockets y haga un write. Si los clientes pueden comunicarse con el server en cualquier momento, entonces un hilo por cliente sería lo suyo (o usar select http://ilab.cs.byu.edu/python/select/echoserver.html que tanto hilo no sé yo...)

Salu2 ;)

1 respuesta
xCoNDoR

#14 Muchas gracias LOc0, estaba un poco perdido en lo referente a Push.
La opcion de Sockets era mi preferida, ya tengo alguna aplicación hecha multicliente con select, asi que me ayudará.
Lo que no sabia si los sockets eran realmente fiables o podian darme algun problema, o si habia alguna otra solución mejor.

Me pondré con ello y a ver que va saliendo

Usuarios habituales

  • xCoNDoR
  • LOc0
  • BLZKZ
  • Zeroner
  • dr_Rouman
  • Soltrac