Celery工作者之间共享XMPP连接

7
我的Web应用需要能够发送XMPP消息(Facebook Chat),我认为Celery可能是一个不错的解决方案。一个任务将包括查询数据库并向多个用户发送XMPP消息。然而,采用这种方法每次运行任务都必须连接XMPP服务器,这不是一个好主意。
Facebook Chat API文档中得知:

最佳实践

  • 您的Facebook Chat集成只应用于预计长期存在的会话。客户端不应频繁开启和关闭。
是否有一种方式可以在工作者之间共享XMPP连接,以便我不必每次发送消息时都重新连接?或者,是否有更好的解决方案?
2个回答

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

是的,这正是我想要的想法。谢谢。 - Riley Watkins

0

如果有一个长时间运行的后台作业,它的工作是接收来自其他短暂进程的消息并将它们推送到XMPP套接字上,那会怎么样?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接