MCPcopy
hub / github.com/aceld/zinx / main

Function main

examples/zinx_version_ex/datapackDemo/server/server.go:11–66  ·  view source on GitHub ↗

只是负责测试datapack拆包,封包功能

()

Source from the content-addressed store, hash-verified

9
10// 只是负责测试datapack拆包,封包功能
11func main() {
12 //创建socket TCP Server
13 listener, err := net.Listen("tcp", "127.0.0.1:7777")
14 if err != nil {
15 fmt.Println("server listen err:", err)
16 return
17 }
18
19 //创建服务器gotoutine,负责从客户端goroutine读取粘包的数据,然后进行解析
20
21 for {
22 conn, err := listener.Accept()
23 if err != nil {
24 fmt.Println("server accept err:", err)
25 }
26
27 //处理客户端请求
28 go func(conn net.Conn) {
29 //创建封包拆包对象dp
30 dp := zpack.NewDataPack()
31 for {
32 //1 先读出流中的head部分
33 headData := make([]byte, dp.GetHeadLen())
34 _, err := io.ReadFull(conn, headData) //ReadFull 会把msg填充满为止
35 if err != nil {
36 fmt.Println("read head error")
37 break
38 }
39 //将headData字节流 拆包到msg中
40 msgHead, err := dp.Unpack(headData)
41 if err != nil {
42 fmt.Println("server unpack err:", err)
43 return
44 }
45
46 if msgHead.GetDataLen() > 0 {
47 //msg 是有data数据的,需要再次读取data数据
48 msg := msgHead.(*zpack.Message)
49 msg.Data = make([]byte, msg.GetDataLen())
50
51 //根据dataLen从io中读取字节流
52 _, err := io.ReadFull(conn, msg.Data)
53 if err != nil {
54 fmt.Println("server unpack data err:", err)
55 return
56 }
57
58 fmt.Println("==> Recv Msg: ID=", msg.ID, ", len=", msg.DataLen, ", data=", string(msg.Data))
59 }
60 }
61 }(conn)
62 }
63
64 //阻塞
65 select {}
66}

Callers

nothing calls this directly

Calls 4

GetHeadLenMethod · 0.95
UnpackMethod · 0.95
NewDataPackFunction · 0.92
GetDataLenMethod · 0.65

Tested by

no test coverage detected