2010-08-29 39 views
1

我是網絡編程的新手,但對Python很老。我有一個簡單的吸墨紙程序,可以在多臺客戶機上使用。吸墨紙有兩種方式,它可以顯示和更新數據庫中的信息。爲了避免任何印跡人員顯示舊數據,一旦另一印跡人員更新數據庫中的某些數據,我怎樣才能讓所有印跡人員從數據庫中重新獲取信息?保持多個客戶端在Python中顯示最新信息?

我寧願避免設置一些客戶端 - 服務器協議的複雜性。是否有可能創建某種形式的僅客戶端協議,在簡單刷新消息需要更新其信息時直接傳遞給其他吸墨紙?

+0

什麼是當前的邏輯它的Python腳本? – shahjapan 2010-08-29 12:10:43

+0

不要真的得到這個問題。 – c00kiemonster 2010-08-29 13:44:55

+0

變化的頻率是多少?所有吸墨紙的數據集是否相同?記事簿記錄來自數據源的一個參數或多個值的新數據集?你能否詳細說明信息的性質? – 2010-08-29 16:55:24

回答

0

要接收消息(例如其他發佈者建議的UDP包或HTTP請求),客戶端必須在客戶端計算機上運行基本服務器。例如,您可以使用Python xmlrpc模塊。但是,本地防火牆可能會阻止內部通信。

最簡單的解決方案(如果客戶端數量適中)將頻繁地輪詢數據庫以進行更改:將「最後修改時間」列添加到繪圖表並讓客戶端檢查該字段。這樣客戶就可以發現他們是否需要重新加載繪圖而不浪費太多資源。

編輯:最後一個修改字段可以由更改圖形的客戶端主動更新,也可以由數據庫觸發器自動更新。

+0

有一個問題,我可以在每個客戶端(計算機)上運行套接字服務器(我認爲這就是你所指的)?我不需要有一個套接字服務器,然後有很多可能的套接字客戶端? – c00kiemonster 2010-08-29 13:14:01

+0

服務器偵聽傳入連接的套接字,客戶端進行這些連接。當然,您可以在Python中實現一臺服務器,並從每個客戶端反覆連接,以查看是否有來自另一個客戶端的消息,但您可以對數據庫執行相同的操作。爲了避免頻繁的連接,您需要一個不同的體系結構:您的繪圖應用程序實例監聽傳入的連接並在收到消息時更新其繪圖。在啓動時,他們必須訂閱新聞訂閱源,例如將他們的地址添加到數據庫表中。 – Jojo 2010-08-29 15:36:10

+0

在您的實現中,還要考慮如果客戶端宕機或無法訪問並且無法傳遞消息會發生什麼情況。也許這就是爲什麼另一張海報建議UDP(而不是TCD)的原因。但是請注意,UDP包可能會丟失。除非有很好的理由反對,否則我會選擇「最後修改時間」解決方案。 – Jojo 2010-08-29 15:44:45

0

您可以使用觸發器。當信息更新時,發送信號(由您決定,可能只是一個udp數據包)發送給所有吸墨紙,從而相應地更新其信息。 Postgresql可以使用python編寫腳本。