2013-10-16 210 views
1

我需要一個TCP套接字客戶端連接到服務器來發送數據和接收。 但是,此套接字必須始終打開,我無法打開另一個套接字。Python的TCP套接字客戶端

我總是有一些數據要發送,然後再處理之前發送的數據的答案。

如果我可以打開很多套接字,我認爲它更容易。但在我的情況下,我不得不異步地在同一個套接字上發送所有內容。

所以問題是,你建議在Python生態系統中使用什麼? (扭曲,龍捲風等) 我應該考慮Node.js還是其他選項?

+0

我不認爲這是一個很好的做法,保持你的套接字在線,爲什麼你不能只是在另一個部分獲得數據處理,並再次打開一個套接字? –

+0

我會盡力解釋。這是服務器的要求。該服務器處理命令併發回答案。當我打開一個新的連接時,我需要用一個ID標識自己(我只有一個ID可用)。在任何給定時間,我只能使用此ID的一個套接字連接。我試圖找出發送大量命令並處理答案的最佳方式。 – balsagoth

+0

它聽起來像你正在與之通信的服務器在TCP之上定義了一個協議。你能解釋一下你正在使用的服務器程序嗎? – SingleNegationElimination

回答

3

我強烈建議您發送爲此扭曲:

  • 它爲許多TCP協議提供了開箱即用的支持。
  • 很容易維護一個連接,有一個ReconnectingClientFactory將處理斷開連接並使用指數回退,並且LoopingCall可以很容易地實現心跳。
  • 有狀態協議也很容易實現並與複雜的業務邏輯混合在一起。
  • 這很有趣。

我有一個與您所提到的服務完全相同的服務(單一登錄,始終保持,處理數據)。它已經持續了幾個月,像冠軍一樣工作。

扭曲可能很難讓你的頭,但教程here是一個很好的開始。瞭解Twisted將從長遠來看讓你走得更遠!

+0

有趣。您是否異步發送和接收數據?你使用任何一種油門發送? – balsagoth

+0

@balsagoth:是的。我有一臺服務器發送數據/接收結果,並將結果分發給訂閱的各種客戶端。在處理多個同時發生的事情,路由等(業務邏輯)時,Twisted特別發光。我不做任何限制,但有一個簡單易用的ThrottlingFactory。 – Max

+0

很棒@max。我會嘗試。謝謝 – balsagoth

0

「我要送都在同一插座異步的」

您將數據添加到隊列中,有一個單獨的線程,取放物品從隊列中,並通過socket.send()