我的网络应用程序需要能够发送XMPP消息(Facebook聊天),我认为Celery可能是一个很好的解决方案。一个任务将包括查询数据库并向多个用户发送XMPP消息。然而,使用这种方法,每次运行任务时我都必须连接到XMPP服务器,这不是一个好主意。
从Facebook聊天API文档:
最佳实践
- 您的Facebook聊天集成应仅用于预期寿命较长的会话。客户不应迅速跳槽
有没有一种方法可以在员工之间共享XMPP连接,这样我就不必每次发送消息时都重新连接?或者,有更好的解决方案吗?
您可以在芹菜任务模块中全局创建连接,并在任务中使用它来发送消息。在这种情况下,连接将在启动时建立,并在工作进程之间共享。
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()
一个长时间运行的后台作业的工作是接收来自其他短命进程的消息并将其推送到XMPP套接字上,这怎么样?