2011-02-01 7 views
5

Ho sviluppato un set di server di streaming audio, tutti utilizzano Twisted e ovviamente sono in Python. Funzionano, ma un problema continua a preoccuparmi, quando ho trovato alcuni bug nel server in esecuzione, o voglio aggiungere qualcosa nel server, ho bisogno di fermarli e iniziare. A differenza dei server HTTP, è consentito riavviarli ogni volta, ma non a quelli con streaming audio. Una volta riavviato il mio server di streaming, significa che i miei utenti incontreranno una disconnessione.Come creare server Twisted in grado di eseguire hot code swap in Python?

Ho provato a impostare un passo d'uomo (un servizio ssh per i server Twisted, è possibile accedere e digitare il codice Python nella console per fare qualcosa), e connettersi alla console, ricaricare i moduli Python al volo. Funziona a volte, ma è difficile da controllare. Non si sa mai quante istanze della vecchia classe ci sono nel server, e alcune potrebbero essere difficili da raggiungere e le relazioni di classe sarebbero molto complesse. Inoltre, potrebbe funzionare in alcune situazioni, ma a volte è davvero necessario riavviare il server, ad esempio, si sta eseguendo il server con il reattore di selezione e si desidera eseguirlo con il reattore epoll, quindi è necessario riavviarlo. Un altro esempio, quando l'utilizzo della memoria è troppo alto, è necessario riavviarli anche tu.

Per costruire un sistema del genere, ho un'idea che mi viene in mente, penso che sia possibile trasferire quelle connessioni e dati da un processo a un altro. Ad esempio:

Abbiamo un server denominato Broadcasting e l'istanza in esecuzione è in Rev.123 e vogliamo sostituirla 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 

È possibile? Non ho idea che la durata delle maniglie di socket legate ai processi o meno, ho pensato che i socket creati da un processo verranno chiusi quando il processo del creatore verrà ucciso, ma non ne sono sicuro. Se è possibile, ci sono linee guida o articoli per la progettazione di questo tipo di meccanismo di scambio di codici a caldo? E c'è qualcosa che può ottenere ciò che voglio per Twisted già fatto?

Grazie.

+0

Ho dimenticato di menzionare che eseguo tutti quei server su Linux CentOS. –

risposta