Celery工作者之间的共享XMPP连接

时间:2012-01-05 21:24:49

标签: python django xmpp celery facebook-chat

我的网络应用程序需要能够发送XMPP消息(Facebook聊天),我认为Celery可能是一个很好的解决方案。任务包括查询数据库并将XMPP消息发送给许多用户。但是,使用这种方法,我每次运行任务时都必须连接到XMPP服务器,这不是一个好主意。

来自Facebook Chat API docs

  

最佳做法

     
      
  • 您的Facebook聊天集成应仅用于预期长寿的会话。客户不应该快速流失。
  •   

有没有办法在员工之间共享XMPP连接,所以每次我想发送邮件时都不必重新连接?或者,有更好的解决方案吗?

2 个答案:

答案 0 :(得分:4)

您可以在celery任务模块中全局创建连接,并从任务中使用它来发送消息。在这种情况下,连接将在启动时建立,并将在工作进程之间共享。

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

答案 1 :(得分:0)

长时间运行的后台作业如何从其他短期进程接收消息并将它们推送到XMPP套接字上呢?