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 ...