2012-01-05 37 views
7

Ứng dụng web của tôi cần có khả năng gửi tin nhắn XMPP (Facebook Chat), và tôi nghĩ Celery có thể là một giải pháp tốt cho việc này. Một nhiệm vụ sẽ bao gồm truy vấn cơ sở dữ liệu và gửi thông báo XMPP tới một số người dùng. Tuy nhiên, với cách tiếp cận đó tôi sẽ phải kết nối với máy chủ XMPP mỗi khi tôi chạy một nhiệm vụ, đó không phải là một ý tưởng tuyệt vời.Chia sẻ kết nối XMPP giữa nhân viên Celery

Từ Facebook Chat API docs:

Best Practices

  • Facebook của bạn trò chuyện hội nhập chỉ nên được sử dụng cho các phiên được dự kiến ​​sẽ được tồn tại lâu dài. Khách hàng không nên nhanh chóng bật và tắt.

Có cách nào để chia sẻ một kết nối XMPP giữa người lao động vì vậy tôi không cần phải kết nối lại mỗi khi tôi muốn gửi một thông điệp? Hoặc, là có một giải pháp tốt hơn?

Trả lời

4

Bạn có thể tạo kết nối trên toàn cầu trong mô-đun nhiệm vụ cần tây của bạn và sử dụng nó từ nhiệm vụ của bạn để gửi tin nhắn. Trong trường hợp đó, kết nối sẽ được thiết lập khi khởi động và sẽ được chia sẻ giữa các quy trình công nhân.

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

Vâng, đây là ý tưởng tôi sẽ làm. Cảm ơn. –

0

Làm thế nào về một công việc nền dài chạy có công việc nó sẽ nhận được tin nhắn từ các quá trình ngắn ngủi khác và đẩy chúng vào một ổ cắm XMPP?

Các vấn đề liên quan