Conexión compartida XMPP entre trabajadores de apio.

Mi aplicación web necesita poder enviar mensajes XMPP (chat de Facebook), y pensé que Celery podría ser una buena solución para esto. Una tarea consistiría en consultar la base de datos y enviar el mensaje XMPP a varios usuarios. Sin embargo, con ese enfoque tendría que conectarme al servidor XMPP cada vez que ejecuto una tarea, lo cual no es una gran idea.

De los documentos de la API de chat de Facebook :

Mejores prácticas

  • La integración de su chat de Facebook solo debe usarse para sesiones que se espera que sean de larga duración. Los clientes no deben agitarse rápidamente.

¿Hay alguna forma de compartir una conexión XMPP entre trabajadores para que no tenga que volver a conectarme cada vez que quiera enviar un mensaje? O, ¿hay una mejor solución?

Puede crear una conexión global en el módulo de tareas de apio y usarla de sus tareas para enviar mensajes. En ese caso, la conexión se establecerá en el inicio y se compartirá entre los procesos de trabajo.

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() 

¿Qué tal un trabajo en segundo plano de larga duración cuyo trabajo sería recibir mensajes de otros procesos de corta duración y enviarlos a un socket XMPP?