2014-11-26 7 views
5

Sto creando un'applicazione python con l'applicazione di chat. L'applicazione chat si basa solo su tornado. Ma la chat richiede vari accessi al database e Django ORM lo fa magnificamente. Sto usando le websocket per la chat. Così ho seguenti opzioni:Tornado WebSocket con Django ORM con sessione condivisa

  1. eseguire entrambi i processi su un'altra porta e ogni volta che ho bisogno di accedere alle funzioni di Django farò una richiesta asyncHTTPClient a un'altra porta e ottenere i dati, ma con conseguente carico in più per Django server di
  2. Run Django all'interno tornado server e aggiungere progetto Django per virtualenv PYTHONPATH e utilizzare le funzioni di Django direttamente, ma questo si tradurrà in operazioni di blocco

quindi, quello che dovrebbe essere il modo migliore per unire questi due quadri in modo che entrambe le opere buone, senza molti cambiamenti e problemi di prestazione.

risposta

3

Dipende da quante volte è necessario accedere alle funzioni di Django dal processo di tornado. Se tale conteggio di accesso è basso, il primo approccio è migliore. E se grande, quindi scegliere secondo.

ma vorrei cercare di attuare il primo approccio, in quanto:

  • La maggior parte della logica del progetto sarà in progetto Django. Tornado fornirà solo i mezzi per chattare
  • Se accederai al database dal tornado, dovrai sincronizzare i tuoi modelli di django ei tuoi modelli di tornado. Inoltre, nel tornado è meglio usare il driver del database asincrono. Quindi, il primo approccio eviterà questo dolore.

A mio parere, sarà meglio implementare alcune API REST sul lato django e sul lato del tornado e questi processi comunicheranno tramite questa API tra loro. Prova a progettare la tua architettura in modo tale che dovrai utilizzare questa API il più raro possibile.

Si consiglia di verificare (o forse addirittura utilizzare) il progetto denominato centrifuge. È costruito in cima al tornado e fornisce i mezzi per implementare i messaggi in tempo reale. Ha API REST, quindi puoi controllarlo da qualsiasi altro processo. In questa risposta è descritto il flusso di lavoro di django + centrifuga: https://stackoverflow.com/a/26930534/821594