在Celery工作进程之间共享XMPP连接
我的网页应用需要能够发送XMPP消息(也就是Facebook聊天),我觉得用Celery可能是个不错的选择。一个任务就是从数据库查询信息,然后把XMPP消息发送给多个用户。不过,这样做的话,每次运行任务时都得重新连接到XMPP服务器,这样不是个好主意。
最佳实践
- 你的Facebook聊天集成应该只用于那些预计会持续很长时间的会话。客户端不应该频繁地连接和断开。
有没有办法让多个工作进程共享一个XMPP连接,这样我就不用每次发送消息时都重新连接?或者,有没有更好的解决方案?
2 个回答
0
你觉得怎么样,有一个长时间运行的后台任务,它的工作就是接收来自其他短暂运行的程序的信息,然后把这些信息推送到一个XMPP的连接上?
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()