2012-01-05 10 views
7

La mia app Web deve essere in grado di inviare messaggi XMPP (chat di Facebook) e ho pensato che Celery potesse essere una buona soluzione per questo. Un'attività consisterebbe nell'interrogare il database e inviare il messaggio XMPP a un numero di utenti. Tuttavia, con questo approccio dovrei connettermi al server XMPP ogni volta che eseguo un'attività, che non è una grande idea.Connessione XMPP condivisa tra gli operatori di Celeria

Dal Facebook Chat API docs:

Best Practices

  • l'integrazione Chat Facebook deve essere utilizzato solo per le sessioni che si prevede essere di lunga durata. I clienti non dovrebbero agitarsi e spegnersi rapidamente.

C'è un modo per condividere una connessione XMPP tra i lavoratori in modo da non dover ricollegare ogni volta che voglio mandare un messaggio? O c'è una soluzione migliore?

risposta

4

È possibile creare una connessione a livello globale nel modulo delle attività di sedici e utilizzarlo dalle attività per inviare messaggi. In tal caso, la connessione verrà stabilita all'avvio e verrà condivisa tra i processi di lavoro.

import socket 
from celery.task import task 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(('localhost', 9999)) 

@task 
def echo(arg): 
    s.send(arg) 
    return s.recv() 
+0

Sì, questa è l'idea che sto andando. Grazie. –

0

Che ne dici di un lavoro in background di lunga durata il cui compito sarebbe ricevere messaggi da altri processi di breve durata e inviarli su un socket XMPP?

Problemi correlati