Documentation
¶
Index ¶
- Constants
- func UpdateWriteDeadline(conn net.Conn, lastTime *time.Time, thisTime time.Time, ...) error
- type ConnOptions
- type Connect
- type DefaultRemote
- type Disconnect
- type DisconnectReason
- type IHandler
- type IPacketLimit
- type IRemote
- type ISend
- type KCPOptions
- func (p *KCPOptions) Configure() error
- func (p *KCPOptions) Merge(opts ...*KCPOptions) *KCPOptions
- func (p *KCPOptions) WithAckNodelay(ackNodelay bool) *KCPOptions
- func (p *KCPOptions) WithBlockCrypt(blockCrypt kcp.BlockCrypt) *KCPOptions
- func (p *KCPOptions) WithFEC(fec bool) *KCPOptions
- func (p *KCPOptions) WithInterval(interval int) *KCPOptions
- func (p *KCPOptions) WithMtu(mtu int) *KCPOptions
- func (p *KCPOptions) WithNc(nc int) *KCPOptions
- func (p *KCPOptions) WithNoDelay(nodelay int) *KCPOptions
- func (p *KCPOptions) WithRcvWindowSize(rcvWindowSize int) *KCPOptions
- func (p *KCPOptions) WithResend(resend int) *KCPOptions
- func (p *KCPOptions) WithSndWindowSize(sndWindowSize int) *KCPOptions
- type PackLimitDefault
- type Packet
- type PacketLimitOptions
- func (p *PacketLimitOptions) Configure() error
- func (p *PacketLimitOptions) Merge(opts ...*PacketLimitOptions) *PacketLimitOptions
- func (p *PacketLimitOptions) WithMaxCntPerSec(maxCntPerSec uint32) *PacketLimitOptions
- func (p *PacketLimitOptions) WithNewPacketLimitFunc(newPacketLimitFunc func(maxCntPerSec uint32) IPacketLimit) *PacketLimitOptions
- type Status
Constants ¶
View Source
const (
EventAddTimeoutDuration = 3 * time.Second // 事件-加入的超时时间
)
View Source
const ServerNetTypeNameKCP = "kcp"
View Source
const ServerNetTypeNameTCP = "tcp"
View Source
const ServerNetTypeNameWebSocket = "websocket"
Variables ¶
This section is empty.
Functions ¶
Types ¶
type ConnOptions ¶
type ConnOptions struct {
ReadBuffer *int // readBuffer sets the size of the operating system's receive buffer associated with the connection. [default]: 1024*1024/系统默认
WriteBuffer *int // writeBuffer sets the size of the operating system's transmit buffer associated with the connection. [default]: 1024*1024/系统默认
}
func (*ConnOptions) Configure ¶
func (p *ConnOptions) Configure() error
func (*ConnOptions) Merge ¶
func (p *ConnOptions) Merge(opts ...*ConnOptions) *ConnOptions
func (*ConnOptions) WithReadBuffer ¶
func (p *ConnOptions) WithReadBuffer(readBuffer int) *ConnOptions
func (*ConnOptions) WithWriteBuffer ¶
func (p *ConnOptions) WithWriteBuffer(writeBuffer int) *ConnOptions
type DefaultRemote ¶
type DefaultRemote struct {
SendChan chan any // 发送管道
CancelFunc context.CancelFunc
Object any // 保存 应用层数据
DisconnectReason DisconnectReason // 断开原因
HeaderStrategy xpacket.IHeaderStrategy
PacketLimit IPacketLimit
}
func (*DefaultRemote) GetDisconnectReason ¶
func (p *DefaultRemote) GetDisconnectReason() DisconnectReason
func (*DefaultRemote) IsOverload ¶
func (p *DefaultRemote) IsOverload(cnt uint32, nowTime time.Time) bool
func (*DefaultRemote) SetDisconnectReason ¶
func (p *DefaultRemote) SetDisconnectReason(reason DisconnectReason)
type DisconnectReason ¶
type DisconnectReason int
DisconnectReason 表示断开连接的原因
const ( DisconnectReasonUnknown DisconnectReason = 0 // 未知原因 DisconnectReasonClientShutdown DisconnectReason = 1 // 客户端关闭 DisconnectReasonClientLogic DisconnectReason = 2 // 客户端逻辑 DisconnectReasonServerShutdown DisconnectReason = 3 // 服务端关闭 DisconnectReasonShutdown DisconnectReason = 4 // 关闭-主动关闭 DisconnectReasonPeerShutdown DisconnectReason = 5 // 对端关闭 )
type IHandler ¶
type IHandler interface {
OnConnect(remote IRemote) error // 处理-链接成功-对方链接过来
OnCheckPacketLength(length uint32) error // 处理-检查长度是否合法(包头中) [recv 协程中]
OnCheckPacketLimit(remote IRemote) error // 处理-限流 [recv 协程中]
OnUnmarshalPacket(remote IRemote, data []byte) (xpacket.IPacket, error) // 处理-数据包-反序列化 [recv 协程中] // data:数据 [NOTE] 如果保存该参数 则 需要copy
OnPacket(remote IRemote, packet xpacket.IPacket) error // 处理-数据包
OnDisconnect(remote IRemote) error // 处理-断开链接
}
IHandler 处理 接口
type IPacketLimit ¶
type IPacketLimit interface {
IsOverload(cnt uint32, nowTime time.Time) bool // 是否超载, cnt 为当前包数量, nowTime 为当前时间
}
func NewPackLimitDefault ¶
func NewPackLimitDefault(maxCntPerSec uint32) IPacketLimit
type IRemote ¶
type IRemote interface {
ISend
IPacketLimit
IsConnect() bool
Start(connOptions *ConnOptions, iout xcontrol.IOut, handler IHandler)
Stop()
GetIP() string
GetDisconnectReason() DisconnectReason
SetDisconnectReason(reason DisconnectReason)
}
type KCPOptions ¶
type KCPOptions struct {
SndWindowSize *int // 窗口大小-发送 [default:512]
RcvWindowSize *int // 窗口大小-接收 [default:512]
Nodelay *int // 无延迟 0:关闭 1:打开 [default:1]
Interval *int // 间隔 [default:20ms]
Resend *int // 重传模式 [default:2]
Nc *int // 关闭Nagle算法 0:打开 1:关闭 [default:1]
AckNodelay *bool // 关闭延迟确认 [default:true]
Mtu *int // 最大传输单元 [default:1350]
BlockCrypt kcp.BlockCrypt //加密,解密 [default:nil]
Fec *bool // 是否开启FEC [default:false]
DataShards *int // Fec: true 数据分片数 [default: 10] Fec: false 数据分片数 [default: 0]
ParityShards *int // Fec: true 奇偶校验分片数 [default: 3] Fec: false 奇偶校验分片数 [default: 0]
}
func (*KCPOptions) Configure ¶
func (p *KCPOptions) Configure() error
func (*KCPOptions) Merge ¶
func (p *KCPOptions) Merge(opts ...*KCPOptions) *KCPOptions
func (*KCPOptions) WithAckNodelay ¶
func (p *KCPOptions) WithAckNodelay(ackNodelay bool) *KCPOptions
func (*KCPOptions) WithBlockCrypt ¶
func (p *KCPOptions) WithBlockCrypt(blockCrypt kcp.BlockCrypt) *KCPOptions
func (*KCPOptions) WithFEC ¶
func (p *KCPOptions) WithFEC(fec bool) *KCPOptions
func (*KCPOptions) WithInterval ¶
func (p *KCPOptions) WithInterval(interval int) *KCPOptions
func (*KCPOptions) WithMtu ¶
func (p *KCPOptions) WithMtu(mtu int) *KCPOptions
func (*KCPOptions) WithNc ¶
func (p *KCPOptions) WithNc(nc int) *KCPOptions
func (*KCPOptions) WithNoDelay ¶
func (p *KCPOptions) WithNoDelay(nodelay int) *KCPOptions
func (*KCPOptions) WithRcvWindowSize ¶
func (p *KCPOptions) WithRcvWindowSize(rcvWindowSize int) *KCPOptions
func (*KCPOptions) WithResend ¶
func (p *KCPOptions) WithResend(resend int) *KCPOptions
func (*KCPOptions) WithSndWindowSize ¶
func (p *KCPOptions) WithSndWindowSize(sndWindowSize int) *KCPOptions
type PackLimitDefault ¶
type PackLimitDefault struct {
MaxCntPerSec uint32 // 最大包数量-每秒
Cnt uint32 // 包数量
Time time.Time // 时间
}
func (*PackLimitDefault) IsOverload ¶
func (p *PackLimitDefault) IsOverload(cnt uint32, nowTime time.Time) bool
type PacketLimitOptions ¶
type PacketLimitOptions struct {
NewPacketLimitFunc func(maxCntPerSec uint32) IPacketLimit // 创建包限制器
MaxCntPerSec uint32 // 最大包数量-每秒
}
func NewPacketLimitOptions ¶
func NewPacketLimitOptions() *PacketLimitOptions
func (*PacketLimitOptions) Configure ¶
func (p *PacketLimitOptions) Configure() error
func (*PacketLimitOptions) Merge ¶
func (p *PacketLimitOptions) Merge(opts ...*PacketLimitOptions) *PacketLimitOptions
func (*PacketLimitOptions) WithMaxCntPerSec ¶
func (p *PacketLimitOptions) WithMaxCntPerSec(maxCntPerSec uint32) *PacketLimitOptions
func (*PacketLimitOptions) WithNewPacketLimitFunc ¶
func (p *PacketLimitOptions) WithNewPacketLimitFunc(newPacketLimitFunc func(maxCntPerSec uint32) IPacketLimit) *PacketLimitOptions
Click to show internal directories.
Click to hide internal directories.