7

私のWebアプリはXMPPメッセージ(Facebookチャット)を送信できる必要があり、Celeryがこれに適したソリューションである可能性があると思いました。タスクは、データベースのクエリとXMPPメッセージの多数のユーザーへの送信で構成されます。ただし、そのアプローチでは、タスクを実行するたびにXMPPサーバーに接続する必要があります。これは良い考えではありません。

FacebookチャットAPIドキュメントから:

ベストプラクティス

  • Facebookチャットの統合は、長期にわたると予想されるセッションにのみ使用する必要があります。クライアントは、急速にオンとオフを切り替えてはなりません。

メッセージを送信するたびに再接続する必要がないように、ワーカー間でXMPP接続を共有する方法はありますか?または、より良い解決策はありますか?

4

2 に答える 2

4

セロリ タスク モジュールでグローバルに接続を作成し、それをタスクから使用してメッセージを送信できます。その場合、接続は起動時に確立され、ワー​​カー プロセス間で共有されます。

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()
于 2012-01-17T12:02:27.333 に答える
0

他の短命のプロセスからメッセージを受信し、それらを XMPP ソケットにプッシュすることを仕事とする、長時間実行されるバックグラウンド ジョブはどうでしょうか?

于 2012-01-06T09:38:26.740 に答える