github.com/Mrs4s/MiraiGo@v0.0.0-20240226124653-54bdd873e3fe/client/internal/highway/frame.go (about) 1 package highway 2 3 import ( 4 "encoding/binary" 5 "net" 6 ) 7 8 var etx = []byte{0x29} 9 10 // frame 包格式 11 // 12 // - STX: 0x28(40) 13 // - head length 14 // - body length 15 // - head data 16 // - body data 17 // - ETX: 0x29(41) 18 // 19 // 节省内存, 可被go runtime优化为writev操作 20 func frame(head []byte, body []byte) net.Buffers { 21 buffers := make(net.Buffers, 4) 22 // buffer0 format: 23 // - STX 24 // - head length 25 // - body length 26 buffer0 := make([]byte, 9) 27 buffer0[0] = 0x28 28 binary.BigEndian.PutUint32(buffer0[1:], uint32(len(head))) 29 binary.BigEndian.PutUint32(buffer0[5:], uint32(len(body))) 30 buffers[0] = buffer0 31 buffers[1] = head 32 buffers[2] = body 33 buffers[3] = etx 34 return buffers 35 }