php与tcp哪个快,PHP程序员如何理解TCP协议
理解成一個TCP連接就是兩根相反流動的水管,水就是其中的數據,
數據是沒有邊界的,水流也沒有界限,因此你需要根據水流的大小,來截取對應的數據,解碼成你需要的數據。
比如協議規定tcp 的頭部2個字節表示長度,余下的字節表示body部分的具體內容(具體協議可以自定義)
于是我在第一次讀取數據的時候,先讀取2個字節,然后把這兩個字節轉成10進制,就是body的長度. 然后重新生成body的數組,繼續讀:var conn net.Conn
type YourStruct struct {
Username string `json:"username"`
}
for {
b := make([]byte, 2)
_, err := io.ReadFull(conn, b)
if err != nil {
return
}
length := binary.BigEndian.Uint16(b)
body := make([]byte, length)
_, err = io.ReadFull(conn, body)
if err != nil {
return
}
// 解析結構體
var v = new(YourStruct)
json.Unmarshal(body, v)
fmt.Println(v.Username)
}
寫數據也是一樣的道理:先計算需要寫的長度,轉換成byte數組發送,然后再發送body。var conn net.Conn
type YourStruct struct {
Username string `json:"username"`
}
for {
v := YourStruct{Username: "hahah"}
data, _ := json.Marshal(v)
header := make([]byte, 2)
binary.BigEndian.PutUint16(header, uint16(len(data)))
// 寫頭
conn.Write(header)
// 寫body
conn.Write(data)
}
tcp的邊界定義就是跟據你定的協議,組裝好數據包,發送的時候組裝包,獲取的時候拆包.
2個字節的頭,body最長應該是65535個字節,超過這個長度,header就應該增加長度
總結
以上是生活随笔為你收集整理的php与tcp哪个快,PHP程序员如何理解TCP协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1人份汤圆用多少糯米粉?
- 下一篇: 动态规划算法php,php算法学习之动态