我正在研究我知道的兩種不同的TCP消息構架方法的優缺點。.NET中的消息構造方法優點和缺點
- 分界符:TCP流通過使用分隔符字節分解爲非固定長度的消息。發送數據時,例程必須檢查分隔符的消息數據並將其轉義以確保消息幀的安全傳輸。當接收數據時,例程必須通過流來讀取分隔符字節以將幀分解爲消息。
EG:用戶[用戶名] \ n密碼[密碼] \ n上
- 長度前綴:該TCP流被分成預定大小的消息通過使用一個前綴說4個字節爲狀態消息的長度。例程在接收數據時將首先讀取前綴以確定消息幀的長度。發送數據時,例程必須在發送之前將長度前綴添加到消息中。
EG:[MessageLength]用戶[用戶名] [MessageLength]密碼[密碼]
這些方法都允許將被解釋,可以在尺寸上變化,並且包含一個字節流的消息幀的傳輸。較高級別的消息結構或協議不相關。
因此,我將注意力集中在可伸縮性和性能效率上。我發現自己需要運行基準測試,以查看哪種方法可以在不涉及任何消息處理的情況下獲得最高的效率吞吐量。
我目前的想法,我不是專家的任何手段。
定界消息幀在接收例程期間效率較低,因爲流中的每個字節都需要檢查消息幀定界符。長度爲前綴的消息幀將始終讀取前綴字節,並且消息幀流的其餘部分將直接進入緩衝區而不進行處理,直到接收到整個消息幀爲止。
作爲長度 - 前綴消息幀在發送例程期間作爲消息前綴將在消息本身之前傳輸的效率較低。
我能想到的可能包括其他因素:
- 許多小消息幀將導致一個長度爲前綴的結構正在發送更多的數據包。
- 由於沒有讀取每個字節以檢查分隔符,因此使用長度前綴結構可以更有效地處理大量較大的消息幀。
過這個話題的任何光線將是真棒。我發現很難找到有關TCP消息幀結構之間差異的良好資源。
您試圖發明IP,TCP/IP的另一部分。這是行不通的,它已經在那裏,你不能直接影響它,也不需要任何幫助。 TCP是一個*流*,試圖將其分解成片斷將會使其非常低效。只有選項2有資格。 – 2012-08-17 04:41:20
我正在談論的消息幀,你必須實現通過數據包中的TCP流傳輸數據。我不是想發明任何東西。我正在嘗試討論您選擇實施的框架的優缺點。例如。像「USER [用戶名] \ n」這樣的定界消息幀:其中「\ n」是定界符,因此它是一個定界消息幀。 – 2012-08-17 04:52:51