簡體   English   中英

我應該在每個成功的消息句柄后關閉套接字嗎?

[英]Should I close my socket after every successful message handle?

我正在編寫一個具有Java Server / Client套接字的程序。 將來會發送許多消息,並且在某些情況下,向服務器發送消息並等待一段時間直到服務器發回“執行”消息。

這是我的計划:

  • 1台服務器(機器上可能有防病毒安全)
  • 3個客戶(未來有更多客戶的空間)
  • 基於客戶端輸出到服務器,在服務器端執行並行和交錯同步。
  • 當所有機器都准備好(同步)時,並行時所有客戶端都將發送一個“執行”消息,當交錯客戶端按順序發送一個“執行”命令1

我已經開始構建程序以在上面進行此設置,並且一旦在服務器上收到消息,服務器就根據輸入執行操作,然后將消息發送回客戶端。 我過去遇到過沒有正確發送或收到郵件的問題,所以我的問題是:

  • 在我的程序結束之前,我是否保持套接字存活?
  • 或者,只有在成功傳輸(完全握手)並關閉套接字之后才打開套接字? 下次希望發送消息時讓客戶端再次連接。

您當然應該盡可能長時間地保持TCP連接處於打開狀態,但是要准備好在失敗時創建新的連接。 您需要在兩端使用讀取超時來檢測這些。

問:我應該為每個連接打開一個新套接字,還是將其保留並重新用於后續連接?

答:“這取決於”。

我鼓勵你“保持簡單”,只需根據需要打開新的插座......直到你發現自己需要它。

無論如何:只要您合理地期望客戶端和服務器之間存在“對話”,就保持套接字打開。 如果他可能想要快速合理地再次談話,請不要強迫客戶建立新連接。

最后,看看有關“連接池”的這些鏈接:

在消息之后是否關閉套接字取決於您在服務器和客戶端之間使用的協議。 可能你自己定義了這個。 更重要的是,您可以並行服務多個客戶端。 因此,您需要為請求連接的每個客戶端啟動一個單獨的線程。 就個人而言,我用套接字通信做了一些應用程序。 為了防止資源在不使用時保留太長時間,但是在大量使用連接時也不會不斷關閉和重新打開,我添加了一個連接主管。 這是另一個線程,它在連接打開時啟動,並且只從預定義值執行倒計時(例如,從60開始倒計時,在1分鍾的監督時間內每秒遞減一次值)。 當計數器達到零時,命令關閉套接字,並終止該特定線程。 當套接字打開並收到新消息時,請重置監督計數器,這樣只要消息之間的時間少於1分鍾,套接字就會保持打開狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM