2012-01-05 22 views
7

私のWebアプリケーションはXMPPメッセージ(Facebook Chat)を送信できる必要があり、Celeryがこのための良い解決策であると思っていました。タスクは、データベースにクエリを行い、XMPPメッセージを複数のユーザーに送信することで構成されます。しかし、そのアプローチでは、私はタスクを実行するたびにXMPPサーバーに接続する必要があります。これは素晴らしい考えではありません。 Facebook Chat API docsからCelery worker間の共有XMPP接続

ベストプラクティス

  • あなたのFacebookのチャットとの統合は長寿命であることが予想されるセッションのために使用すべきです。クライアントは急速にオンとオフに変わるべきではありません。

私がメッセージを送信するたびに再接続する必要はありませんので、労働者との間にXMPP接続を共有する方法はありますか?または、より良い解決策がありますか?

答えて

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

ええ、これは私が行っているアイデアです。ありがとう。 –

0

長寿命バックグラウンドジョブは、他の短命プロセスからのメッセージを受信して​​XMPPソケットにプッシュするジョブではどうでしょうか?

関連する問題