我有一個關于TCPStreamRust 包的問題。我想從服務器讀取資料。問題是不能保證資料是在一個 TCP 包中發送的。
我的問題來了:讀取的訊息是否能夠讀取多個包,還是必須呼叫多個包?有什么“最佳實踐”嗎?
uj5u.com熱心網友回復:
從用戶空間 TCP 資料包是不可見的,它們的邊界無關緊要。相反,用戶空間僅讀取位元組流并僅寫入位元組流。打包是在較低級別以對延遲和帶寬最佳的方式完成的。很可能write來自用戶空間的多個資料包最終出現在同一個資料包中,也可能發生單個write資料包會導致多個資料包。也是如此read:它可能會得到一個資料包的一部分,它可能會從多個連續的資料包中獲取有效載荷......
來自底層傳輸的任何資料包邊界在用戶空間中不再可見。因此,使用 TCP 的協議必須在位元組流之上實作自己的訊息語意。
所有這些都不是 Rust 特有的,也適用于其他編程語言。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/337791.html
