node 第七章TCP通訊的拆包與封包

2021-09-09 05:17:02 字數 1123 閱讀 3790

1: 在通訊的過程中,我們可能有傳送多個資料報,資料報a,資料報b,資料報c,此時我們最好的期望是每次收到資料報a,資料報b,資料報c。但是tcp底層為了傳送效能,可能會一次把abc所有資料一起傳過來,這個時候收到的是a+b+c,這個時候上層傻眼了,無法區分a,b,c這個叫做---粘包;

1:要解決abc資料報無法正確的拆分出a,b,c三個資料,我們需要在abc之間插入長度/分解標誌,這樣根據長度和分解標誌來解析出abc的資料報;

2: 打入長度資訊兩種方式:       (1)「資料長度」 + 包體  (2)(包體 + 特定的結尾符號)

3: 本例採用 資料長度 +包體的方式。 資料長度2個位元組,超過2個位元組大小的資料,上層可以分多次傳送;

4: 這裡的包,是上層的應用協議的包,與tcp的包是兩回事;

// 根據封包協議我們讀取包體的長度;

read_pkg_size: function(pkg_data, offset)

var len = pkg_data.readuint16le(offset);

return len;

},// 把乙個要傳送的資料,封包 2個位元組的長度 + 資料

// data string 二進位制的buffer

package_data: function(data) ,

client_sock.on("data", function(data) 

else

var offset = 0;

var pkg_len = netpkg.read_pkg_size(last_pkg, offset);

if (pkg_len < 0)

while(offset + pkg_len <= last_pkg.length)

pkg_len = netpkg.read_pkg_size(last_pkg, offset);

if (pkg_len < 0)

}// 能處理的資料報已經處理完成了,儲存 0.幾個包的資料

if (offset >= last_pkg.length)

else

// end

第七章 TCP和UDP原理

一 引入 1.tcp ip協議族的傳輸層協議主要包括tcp和udp 2.tcp是面向連線的可靠的傳輸層協議。它支援在並不可靠的網路上實現面向連線的可靠的資料傳輸 3.udp是無連線的傳輸協議,主要用於支援在較可靠的鏈路上的資料傳輸,或用於對延遲較敏感的應用 二 tcp ip傳輸層的作用 1.傳輸層作...

第七章 程序間通訊

第七章 程序間通訊 1 程序間通訊簡介 多個程序之間相互通訊 交換資訊的方法 方法 1 本地程序通訊 共享記憶體 訊號量 管道 命名管道 訊息佇列 2 遠端通訊 套介面 全雙工管道 2 共享記憶體和訊號量 1 共享記憶體 通過兩個或多個程序共享同一塊記憶體區域實現程序間通訊 最底層的通訊機制,最快速...

第七章 文件的操作

一.建立文件 建立文件的有兩種方式 put建立文件 需要指定文件的id post建立文件 不需要指定文件id,elasticsearch 可以幫我們自動生成 id,自動生成的 id 是 url safe 基於 base64 編碼且長度為20個字元的 guid 字串 put website blog ...