使用 TCP 連線在 Go (Golang) 中編寫代理程式
建立 TCP 代理程式時,資料保存至關重要。本文深入研究了確定何時接收到來自伺服器的所有資料的複雜性,儘管事先不知道訊息格式。
解決此問題的一個策略是在每次套接字讀取後等待,以確保代理不會讀取速度不會快於接收資料的速度。但是,人們擔心超時情況會阻止代理區分空套接字和延遲的伺服器回應。
另一種方法是將等待呼叫的時間與逾時值進行比較。如果等待呼叫超過逾時,則可以安全地假設伺服器已停止寫入,從而允許代理繼續前進並關閉連線。
儘管此方法在某些情況下可能有效,例如緊張的資料中心在盡可能減少延遲的情況下,重要的是要承認潛在的陷阱。例如,如果伺服器一次只寫入一個位元組並且延遲很嚴重,則代理程式可能會錯誤地斷定它已收到整個訊息並提前終止傳輸。
為了減輕潛在的死鎖,請考慮使用 goroutine處理單獨的讀取和寫入操作,確保一個被阻止的操作不會停止整個過程。
以上是在事先不知道訊息格式的情況下,Go TCP 代理如何確保完整的資料傳輸?的詳細內容。更多資訊請關注PHP中文網其他相關文章!