簡體   English   中英

使用TCP - Java套接字的心跳原型的良好超時

[英]Good timeout for heartbeating proto using TCP - Java Sockets

我在Java中實現我自己的proto,它將使用TCP連接的心跳,我也用它來傳輸消息和文件。 對於客戶端,我使用阻塞套接字I / O. 所以這就是我計划如何工作......我將設置套接字超時為K秒並使心跳保持在間隔T內發送消息,以便T <K。如果超時到期,看起來服務器處於脫機狀態對於客戶,反之亦然。

心跳是發送字符串的服務器和客戶端應答另一個字符串。

我不想浪費大量的帶寬但是超時很長時間服務器可能會誤認為客戶的狀態。

什么是良好的K區間? 我在想40秒

PS:字符串是ISO-8859-1中發送的8個字母,因此它的數據很小

“K”高度依賴於應用程序的特定流量配置文件(例如,應用程序數據傳輸的頻率)和應用程序對連接丟失的容忍度(例如,接收器檢測連接丟失的速度有多快)。 不幸的是,低開銷和快速檢測是相反的目標。

這聽起來像你試圖解決TCP半開連接問題(RFC 793意義) 如果是這樣,如果你不知道“半開放”一詞,研究TCP“半開放”可能會指向一些有用的信息,如:

http://www.codeproject.com/Articles/37490/Detection-of-Half-Open-Dropped-TCP-IP-Socket-Conne.aspx

我不認為這里有一個通用的“正確”答案,它真的取決於你的需求。 您需要平衡帶寬要求和服務認為客戶端仍然存在的成本。 這些需求因應用而異。 對於IM,您可能想在幾秒鍾內知道,但對於文件傳輸應用程序,幾分鍾可能是可以接受的。

暫無
暫無

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

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