2014-06-24 116 views
0

我有一個python程序,它讀取ADC中的值,然後將它們寫入文件,並在TCP連接可用時通過TCP發送它們。我可以很好地發送數據,但隨着數據不斷被讀取,我希望能夠保持連接打開。我如何讓客戶端檢查服務器是否有更多數據要發送,從而保持連接打開?維護TCP連接

+0

爲什麼你不能只發送向服務器發送一個命令(以字符串形式),該命令將導致響應是否有要發送的數據? –

+0

嘗試發送每秒保持活動(一些任意數據) –

回答

0

這種情況看起來與我們的應用程序非常相似。我們爲此使用ZeroMQ。

使用ZeromMQ與PUB/SUB

PyZMQ doc是例如用於使用發佈/訂閱。

數據提供者創建PUB套接字並向其發送消息。

數據使用者設置SUB套接字並從中讀取消息。

通常情況下,PUB套接字是固定的基礎設施的一部分,所以它綁定到某個端口,並連接SUB。但如果你喜歡,你可以切換它,它也可以。

優點是:

  • 提供商將消息發送到PUB套接字,並不會阻止的,如果沒有消費者或連接,PUB插座會丟棄該消息時
  • 重新連接被自動
  • 處理。
  • 代碼來實現,這是很短的

其他消息傳遞模式與ZeroMQ

的Pub/Sub只是一種選擇,有喜歡的推/拉,REQ/REP等

其他組合

我有一些服務運行多年PUSH/PULL,並保持「相當好」(通常有6個星期才需要重新啓動,但這是由於硬件上的問題比在ZeroMQ庫中。 )