高性能TcpServer_Go

 

 

 

心跳协议

C->S
IOT=0033#Meter01#1663047537917418700#01##

断包
IOT=0033#
Meter01#1663047537917418700#01##

粘包
IOT=0033#Meter01#1663047537917418700#01##IOT=0033#Meter01#1663047537917418700#01##

垃圾包
**IOT=0033#Meter01#1663047537917418700#01##

超时断开 serviceinstance.go var timeout = 30 * time.Second

S->C
IOT=0035#Meter01#1663047537917418700#01#ok#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package function
 
type ByteBuffer struct {
    bufferSize     int
    abyBuf         []byte
    position       int
    recvLength     int
    waitRecvRemain bool
}
 
func NewByteBuffer(bufferSize int) *ByteBuffer {
    p := &ByteBuffer{
        bufferSize: bufferSize,
        abyBuf:     make([]byte, bufferSize, bufferSize),
    }
 
    return p
}
 
func (p *ByteBuffer) Put(tmpbuf []byte) {
    length := len(tmpbuf)
 
    if p.recvLength+length >= p.bufferSize {
        p.Clear()
        return
    }
 
    blockCopy(tmpbuf, 0, p.abyBuf, p.recvLength, length)
 
    p.recvLength += length
}
 
func (p *ByteBuffer) Clear() {
    p.position = 0
    p.recvLength = 0
    p.waitRecvRemain = false
}
 
func (p *ByteBuffer) HasRemaining() bool {
    return p.position < p.recvLength
}
 
func (p *ByteBuffer) CheckRemaining(position int) bool {
    if p.waitRecvRemain {
        p.position = position
    }
    return p.waitRecvRemain
}
 
func (p *ByteBuffer) SetPosition(position int) {
    p.position = position
}
 
func (p *ByteBuffer) GetByte() byte {
    p.waitRecvRemain = false
 
    if p.position >= p.recvLength {
        p.waitRecvRemain = true
        return 0
    }
 
    byRet := p.abyBuf[p.position]
    p.position++
    return byRet
}
 
func (p *ByteBuffer) GetByteArray(length int) []byte {
    p.waitRecvRemain = false
 
    if p.position+length > p.recvLength {
        p.waitRecvRemain = true
        return nil
    }
 
    tmpbuf := make([]byte, length)
    blockCopy(p.abyBuf, p.position, tmpbuf, 0, length)
 
    p.position += length
 
    return tmpbuf
}

  

posted @   CHHC  阅读(87)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示