2010-04-20 70 views
1

我有兩臺服務器 - 一臺Django,另一臺可能用Python編寫 - 另一臺是將「任務」放入數據庫,另一臺正在處理這些任務。在兩臺Python服務器之間發送消息

他們共享一個數據庫,但我希望處理器能夠快速響應新任務,而不是定期輪詢。

是否有任何直接的方式讓兩個Python服務器彼此交談,或者任務處理器是否必須具有Web鉤子或什麼?

感覺,就必須有這樣做一個幸福的方式......

回答

5

目光投向信息經紀人像ActiveMQRabbitMQZeroMQ這可能是您的服務器完美的網絡的一部分。他們的目的是解決類似於你所描述什麼問題。

我工作的實時MMORPG用Python編寫的,我們的守護進程目前正在排隊使用ActiveMQ的與STOMP協議任務彼此服務器部分。

在低級別的消息經紀人保持套接字連接到消費者,使它比定期輪詢更有效率

0

我傾向於使用輪詢。如果任務表不是那麼大,它並不涉及太多的開銷。

否則,您可以實現Web服務或套接字類型的連接。

您可以使用SOAPpy開始編寫Web服務的東西,或者只是擴展BaseHTTPServer或類似的東西來接受來自Django的消息(HTTP請求)。我確實認爲這可能是更多的編程,而不是它的價值,但是如果這些任務不經常發生,那麼它可能是最好的解決方案。

然而,我會在一些受保護的環境中運行我的家庭建立小型服務器;只有Django應該能夠在那裏執行HTTP請求,因爲構建安全的Web服務器並不容易。

編輯

我只是想過Twisted。如果您決定不使用消息隊列(some twisted examples)

1

SimpleXMLRPCServer。

見我的答案在這裏:Network programming in Python

您也可以使用定期輪詢(如果得到的東西很多),但xmlrpcserver應該大部分工作的罰款。