2010-12-10 43 views
7

即時通訊使用Tclientsocket構件實現或Indy的TIdTCPClient(取決於項目)線程是否可以共享相同的客戶端套接字?

我有幾個線程處理每一個項目,有時需要在連接的客戶端套接字發送數據。 (數據讀取形成承插口是不是在處理線程使用)

基本上我的問題是...

  • 是可能的?
  • 它是「安全」嗎?

或者我應該

  • 具有每個線程的客戶機套接字或
  • 一些有點兒的編組/關鍵部分

的Delphi -7-印-9

+1

順便說一句,Indy 9.x已經過時 – 2010-12-10 10:42:39

+0

你好,我知道,(有點德爾菲7我猜)它的事情的「名單」) – 2010-12-10 12:45:19

回答

4

多個線程可以讀寫同一個套接字。因爲每次你在accept時,它都會提取掛起連接隊列上的第一個連接,創建一個具有相同套接字屬性的新套接字,併爲該套接字分配一個新的文件描述符。

因此,每個接受的連接只有一個線程。

如果您問是否可以在接受的連接上進行多次寫入/讀取,您將需要鎖定功能,因此會損失並行性優勢。如果您想要對一個較長的進程進行線程處理,然後將結果寫入套接字,請使用同步按正確的順序進行寫入。

相關問題