我打算使用套接字(本地TCP)在兩個進程(本地運行)之間進行通信。一個進程將充當服務器,但兩個進程都異步地向對方發送消息。我應該在進程的整個生命週期中保持套接字連接的打開狀態,還是爲每個請求重新連接?IPC:爲每個請求連接或保持套接字打開?
如果我保持本地套接字打開,可能會發生任何問題嗎?
我打算使用套接字(本地TCP)在兩個進程(本地運行)之間進行通信。一個進程將充當服務器,但兩個進程都異步地向對方發送消息。我應該在進程的整個生命週期中保持套接字連接的打開狀態,還是爲每個請求重新連接?IPC:爲每個請求連接或保持套接字打開?
如果我保持本地套接字打開,可能會發生任何問題嗎?
保持插座處於打開狀態。
它是一個更簡單的選項,您不需要爲打開新套接字(從客戶端的角度)或接受新客戶端(從服務器的角度)開銷。
+1。一個警告是在協議中包含消息長度。 – 2011-05-30 13:36:55
..或使用其他一些協議,允許通過像TCP這樣的流媒體服務發送'消息'。我同意'保持套接字打開' - 在消息傳遞之前進行三次握手,然後進行四次終止握手,這是減慢應用程序速度的一種好方法,如果在具有高延遲網絡連接的不同計算機上。 – 2011-05-30 13:53:48
@Nikolai N Fetissov - 我會推薦TCP消息的典型方法:用新行(CR和/或LF)分隔的人類可讀消息。 [不太確定這是否適用於這個問題,因爲我不知道他想傳達什麼信息]。 – 2011-05-30 14:13:24
如果它只是一個客戶端,那麼你應該保持打開的套接字,但在出現錯誤的情況下可以重新連接(例如,用戶可以重置網絡接口,因此連接不保證活着)。如果您有多個客戶端,則在一定時間的非活動超時後使用斷開連接。這將讓你擺脫不活動,掛起或「迷失」(那些過去的,但沒有關於套接字關閉的信號)客戶端。
插座類型?我猜測tcp/ip。 – 2011-05-30 13:30:56
是的。這是一個本地TCP套接字[編輯問題] – 2011-05-30 13:32:00