Совместное XMPP-соединение между работниками Celery - PullRequest
7 голосов
/ 06 января 2012

Мое веб-приложение должно иметь возможность отправлять сообщения XMPP (чат Facebook), и я подумал, что Celery может быть хорошим решением для этого.Задача будет состоять из запроса базы данных и отправки сообщения XMPP нескольким пользователям.Однако при таком подходе мне придется подключаться к серверу XMPP каждый раз, когда я запускаю задачу, что не очень хорошая идея.

Из документов API чата Facebook :

Рекомендации

  • Ваша интеграция с чатом Facebook должна использоваться только для сессий, которые, как ожидается, будут долгосрочными.Клиенты не должны быстро включать и выключать.

Существует ли способ обмена XMPP-соединением между работниками, поэтому мне не нужно переподключаться каждый раз, когда я хочу отправить сообщение?Или есть лучшее решение?

Ответы [ 2 ]

4 голосов
/ 17 января 2012

Вы можете создать соединение глобально в вашем модуле задач сельдерея и использовать его из ваших задач для отправки сообщений. В этом случае соединение будет установлено при запуске и будет разделено между рабочими процессами.

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 голосов
/ 06 января 2012

Как насчет длительной фоновой работы, задачей которой было бы получать сообщения от других недолговечных процессов и помещать их в сокет XMPP?

...