mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-04 06:54:45 +08:00
优化增加TcpService的包长度字段配置
This commit is contained in:
@@ -71,11 +71,17 @@ func (client *TCPClient) init() {
|
|||||||
if client.MaxMsgLen == 0 {
|
if client.MaxMsgLen == 0 {
|
||||||
client.MaxMsgLen = Default_MaxMsgLen
|
client.MaxMsgLen = Default_MaxMsgLen
|
||||||
}
|
}
|
||||||
|
if client.LenMsgLen ==0 {
|
||||||
|
client.LenMsgLen = Default_LenMsgLen
|
||||||
|
}
|
||||||
|
maxMsgLen := client.MsgParser.getMaxMsgLen(client.LenMsgLen)
|
||||||
|
if client.MaxMsgLen > maxMsgLen {
|
||||||
|
client.MaxMsgLen = maxMsgLen
|
||||||
|
log.SRelease("invalid MaxMsgLen, reset to ", maxMsgLen)
|
||||||
|
}
|
||||||
|
|
||||||
client.cons = make(ConnSet)
|
client.cons = make(ConnSet)
|
||||||
client.closeFlag = false
|
client.closeFlag = false
|
||||||
|
|
||||||
// msg parser
|
|
||||||
client.MsgParser.init()
|
client.MsgParser.init()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
|
"math"
|
||||||
)
|
)
|
||||||
|
|
||||||
// --------------
|
// --------------
|
||||||
@@ -19,18 +20,21 @@ type MsgParser struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func (p *MsgParser) getMaxMsgLen(lenMsgLen int) uint32 {
|
||||||
|
switch p.LenMsgLen {
|
||||||
|
case 1:
|
||||||
|
return math.MaxUint8
|
||||||
|
case 2:
|
||||||
|
return math.MaxUint16
|
||||||
|
case 4:
|
||||||
|
return math.MaxUint32
|
||||||
|
default:
|
||||||
|
panic("LenMsgLen value must be 1 or 2 or 4")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (p *MsgParser) init(){
|
func (p *MsgParser) init(){
|
||||||
p.INetMempool = NewMemAreaPool()
|
p.INetMempool = NewMemAreaPool()
|
||||||
|
|
||||||
for i:=1;i<=4;i*=2 {
|
|
||||||
max := uint32(1<<(i*8)-1)
|
|
||||||
if p.MaxMsgLen <= max {
|
|
||||||
p.LenMsgLen = i
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
panic("MaxMsgLen value must be less than 4294967295")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// goroutine safe
|
// goroutine safe
|
||||||
|
|||||||
@@ -7,13 +7,16 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const Default_ReadDeadline = time.Second*30 //30s
|
const(
|
||||||
const Default_WriteDeadline = time.Second*30 //30s
|
Default_ReadDeadline = time.Second*30 //默认读超时30s
|
||||||
const Default_MaxConnNum = 1000000
|
Default_WriteDeadline = time.Second*30 //默认写超时30s
|
||||||
const Default_PendingWriteNum = 10000
|
Default_MaxConnNum = 1000000 //默认最大连接数
|
||||||
const Default_LittleEndian = false
|
Default_PendingWriteNum = 100000 //单连接写消息Channel容量
|
||||||
const Default_MinMsgLen = 2
|
Default_LittleEndian = false //默认大小端
|
||||||
const Default_MaxMsgLen = 65535
|
Default_MinMsgLen = 2 //最小消息长度2byte
|
||||||
|
Default_LenMsgLen = 2 //包头字段长度占用2byte
|
||||||
|
Default_MaxMsgLen = 65535 //最大消息长度
|
||||||
|
)
|
||||||
|
|
||||||
type TCPServer struct {
|
type TCPServer struct {
|
||||||
Addr string
|
Addr string
|
||||||
@@ -28,8 +31,7 @@ type TCPServer struct {
|
|||||||
mutexConns sync.Mutex
|
mutexConns sync.Mutex
|
||||||
wgLn sync.WaitGroup
|
wgLn sync.WaitGroup
|
||||||
wgConns sync.WaitGroup
|
wgConns sync.WaitGroup
|
||||||
|
|
||||||
// msg parser
|
|
||||||
MsgParser
|
MsgParser
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,9 +56,9 @@ func (server *TCPServer) init() {
|
|||||||
log.SRelease("invalid PendingWriteNum, reset to ", server.PendingWriteNum)
|
log.SRelease("invalid PendingWriteNum, reset to ", server.PendingWriteNum)
|
||||||
}
|
}
|
||||||
|
|
||||||
if server.MinMsgLen <= 0 {
|
if server.LenMsgLen <= 0 {
|
||||||
server.MinMsgLen = Default_MinMsgLen
|
server.LenMsgLen = Default_LenMsgLen
|
||||||
log.SRelease("invalid MinMsgLen, reset to ", server.MinMsgLen)
|
log.SRelease("invalid LenMsgLen, reset to ", server.LenMsgLen)
|
||||||
}
|
}
|
||||||
|
|
||||||
if server.MaxMsgLen <= 0 {
|
if server.MaxMsgLen <= 0 {
|
||||||
@@ -64,6 +66,17 @@ func (server *TCPServer) init() {
|
|||||||
log.SRelease("invalid MaxMsgLen, reset to ", server.MaxMsgLen)
|
log.SRelease("invalid MaxMsgLen, reset to ", server.MaxMsgLen)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
maxMsgLen := server.MsgParser.getMaxMsgLen(server.LenMsgLen)
|
||||||
|
if server.MaxMsgLen > maxMsgLen {
|
||||||
|
server.MaxMsgLen = maxMsgLen
|
||||||
|
log.SRelease("invalid MaxMsgLen, reset to ", maxMsgLen)
|
||||||
|
}
|
||||||
|
|
||||||
|
if server.MinMsgLen <= 0 {
|
||||||
|
server.MinMsgLen = Default_MinMsgLen
|
||||||
|
log.SRelease("invalid MinMsgLen, reset to ", server.MinMsgLen)
|
||||||
|
}
|
||||||
|
|
||||||
if server.WriteDeadline == 0 {
|
if server.WriteDeadline == 0 {
|
||||||
server.WriteDeadline = Default_WriteDeadline
|
server.WriteDeadline = Default_WriteDeadline
|
||||||
log.SRelease("invalid WriteDeadline, reset to ", server.WriteDeadline.Seconds(),"s")
|
log.SRelease("invalid WriteDeadline, reset to ", server.WriteDeadline.Seconds(),"s")
|
||||||
@@ -80,8 +93,6 @@ func (server *TCPServer) init() {
|
|||||||
|
|
||||||
server.ln = ln
|
server.ln = ln
|
||||||
server.conns = make(ConnSet)
|
server.conns = make(ConnSet)
|
||||||
server.INetMempool = NewMemAreaPool()
|
|
||||||
|
|
||||||
server.MsgParser.init()
|
server.MsgParser.init()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -90,6 +90,10 @@ func (tcpService *TcpService) OnInit() error{
|
|||||||
if ok == true {
|
if ok == true {
|
||||||
tcpService.tcpServer.LittleEndian = LittleEndian.(bool)
|
tcpService.tcpServer.LittleEndian = LittleEndian.(bool)
|
||||||
}
|
}
|
||||||
|
LenMsgLen,ok := tcpCfg["LenMsgLen"]
|
||||||
|
if ok == true {
|
||||||
|
tcpService.tcpServer.LenMsgLen = int(LenMsgLen.(float64))
|
||||||
|
}
|
||||||
MinMsgLen,ok := tcpCfg["MinMsgLen"]
|
MinMsgLen,ok := tcpCfg["MinMsgLen"]
|
||||||
if ok == true {
|
if ok == true {
|
||||||
tcpService.tcpServer.MinMsgLen = uint32(MinMsgLen.(float64))
|
tcpService.tcpServer.MinMsgLen = uint32(MinMsgLen.(float64))
|
||||||
|
|||||||
Reference in New Issue
Block a user