2011-04-13 88 views
9

可能重複:
Should I close a socket (TCPIP) after every transaction?插座應保持打開或拆除

可以說我有某種類型的使用套接字,工程進程間通信。

我的進程應該建立一個連接並保持打開狀態(每個客戶端有1個線程或類似的線程)在需要時發送數據;或者是一種更好的方法來簡單地建立連接,發送我希望的數據,關閉它並再次進入我的等待狀態?

這個問題的解決方法通常是什麼?

+0

出於好奇,爲什麼在命名管道上套接字? – 2011-04-13 05:24:30

+0

在我的情況下,我在Android應用程序和C#之間架起了一座橋樑,所以我不認爲管道是合適的(或可能的)? – 2011-04-13 05:31:23

+0

進程間是指同一臺機器上不同進程間的通信,所以我問,如果他們在不同的機器上,那麼客戶機服務器或對等機器是正確的字。 – 2011-04-13 05:39:44

回答

3

本地套接字沒有太多開銷,因爲它們跳過了TCP/IP協議棧並且使用命名管道實現。保持插座打開和關閉不會有太大的區別。

+1

只有當您專門打開一個Unix域套接字時,本地套接字纔會跳過TCP/IP堆棧 - 可用的地方。 – gby 2011-04-13 05:15:56

2

任何資源,無論是文件,套接字,數據庫連接或硬件設備,需要時間和使用的處理器和內存來打開,因爲它有獲取資源,計算安全訪問,並做一些簿記。

每個消息之間的打開和關閉只會浪費CPU和內存資源。

長時間保持打開狀態也很危險,但您必須保持打開狀態並確定最佳超時值,以便在任何一端死亡時自動關閉它。