2012-01-05 58 views
7

我的網絡應用程序需要能夠發送XMPP消息(Facebook聊天),我認爲芹菜可能是一個很好的解決方案。一項任務將包括查詢數據庫並將XMPP消息發送給多個用戶。但是,通過這種方法,我每次運行任務時都必須連接到XMPP服務器,這不是一個好主意。芹菜工人之間的共享XMPP連接

Facebook Chat API docs

最佳實踐

  • 您的Facebook聊天的整合應該只用於那些有望成爲長期會話。客戶不應該快速打開和關閉。

是否有共享的工人之間的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() 
+0

是的,這是我的目標。謝謝。 – 2012-02-09 19:39:33

0

如果一個長時間運行的後臺作業將接收來自其他短命進程的消息並將其推送到XMPP套接字上,那麼它的工作如何?