2011-02-01 16 views
5

He desarrollado un conjunto de servidores de transmisión de audio, todos ellos usan Twisted, y están en Python, por supuesto. Funcionan, pero un problema me sigue preocupando, cuando encuentro algunos errores en el servidor en ejecución o si deseo agregar algo al servidor, necesito detenerlos y comenzar. A diferencia de los servidores HTTP, está bien reiniciarlos cada vez, pero no está bien con los servidores de transmisión de audio. Una vez que reinicie mi servidor de transmisión, significa que mis usuarios encontrarán una desconexión.¿Cómo construir servidores Twisted que puedan hacer intercambios de código de acceso en Python?

Intenté configurar una alcantarilla (un servicio ssh para servidores Twisted, puede iniciar sesión y escribir el código Python en la consola para hacer algo) y conectarse a la consola, volver a cargar los módulos Python sobre la marcha. A veces funciona, pero es difícil de controlar. Nunca se sabe cuántas instancias de clases antiguas hay en el servidor, y algunas de ellas pueden ser difíciles de alcanzar, y las relaciones de clase serían muy complejas. Además, puede funcionar en algunas situaciones, pero a veces realmente necesita reiniciar el servidor, por ejemplo, está ejecutando el servidor con selector reactor, y desea ejecutarlo con reactor epoll en su lugar, luego debe reiniciarlo. Otro ejemplo, cuando el uso de la memoria es demasiado alto, debe reiniciarlos también.

Para construir tal sistema, tengo una idea que viene a mi cabeza, estoy pensando que es posible entregar esas conexiones y datos de un proceso a otro. Por ejemplo:

Tenemos un servidor llamado Broadcasting, y la instancia en ejecución está en rev.123, y queremos reemplazarlo con rev.124.

Broadcasting rev.123 is running.... 
Startup Broadcasting rev.124 .... 
Broadcasting rev.124 is stand by 
Hand over connections from instance of rev.123 to instance of rev.124 
Stop Broadcasting rev. 123 instance 

¿Esto es posible? No tengo idea de que la vida útil de las manijas de socket está ligada a procesos o no, pensé que los sockets creados por un proceso se cerrarían cuando se matara el proceso del creador, pero no estoy seguro. Si es posible, ¿hay alguna guía o artículo para diseñar ese tipo de mecanismo de intercambio de códigos de acceso rápido? ¿Y hay algo que pueda lograr lo que quiero para Twisted ya hecho?

Gracias.

+0

Olvidé mencionar que ejecuto todos esos servidores bajo Linux CentOS. –

Respuesta

Cuestiones relacionadas