Documentation
      ¶
    
    
  
    
  
    Index ¶
- Constants
 - Variables
 - func RouterID(module, action uint8) uint16
 - type Client
 - type CloseCallbackFunc
 - type Config
 - type ConnFunc
 - type Crypto
 - type Datapack
 - type HandlerFunc
 - type Message
 - type MessageHander
 - type NewMessageFunc
 - type Option
 - func WithCloseTimeout(closeTimeout time.Duration) Option
 - func WithCompress(compress zerocompress.Compress) Option
 - func WithCompressThreshold(compressThreshold int) Option
 - func WithDatapack(datapack Datapack) Option
 - func WithHost(host string) Option
 - func WithLogger(logger zerologger.Logger) Option
 - func WithLoggerLevel(loggerLevel int) Option
 - func WithMaxConnNum(MaxConnNum int) Option
 - func WithNetwork(network string) Option
 - func WithOnConnClose(onConnClose ConnFunc) Option
 - func WithOnConnected(onConnected ConnFunc) Option
 - func WithOnServerClose(onServerClose func()) Option
 - func WithOnServerStart(onServerStart func() error) Option
 - func WithPort(port int) Option
 - func WithRecvBufferSize(recvBufferSize int) Option
 - func WithRecvDeadLine(recvDeadLine time.Duration) Option
 - func WithRecvQueueSize(recvQueueSize int) Option
 - func WithSendBufferSize(sendBufferSize int) Option
 - func WithSendDeadLine(sendDeadLine time.Duration) Option
 - func WithSendQueueSize(sendQueueSize int) Option
 - func WithWhetherCompress(whetherCompress bool) Option
 - func WithWhetherCrypto(whetherCrypto bool) Option
 
- type Peer
 - type PeerOption
 - type Router
 - type SendCallbackFunc
 - type Session
 - type SessionID
 - type SessionManager
 
Constants ¶
const ( // FlagCompress 负载 payload 被压缩 FlagCompress = uint16(0x0001) // FlagEncrypt 负载 payload 被加密 FlagEncrypt = uint16(0x0010) // FlagInit 这是初始化消息 // 用于连接时与客户端做一些初始化信息,例如通过 dh 协议交换密钥,用于后续的 rc4 加密 FlagInit = uint16(0x0100) )
MessageHead 中的 Flag
Variables ¶
var ( // ErrRouterRepeated 路由已存在 ErrRouterRepeated = errors.New("router repeated") // ErrHandlerNotFound 处理函数未找到 ErrHandlerNotFound = errors.New("handler not found") )
var ( // ErrSessionNotFound Session 未找到 ErrSessionNotFound = errors.New("session not found") )
Functions ¶
Types ¶
type Client ¶
type Client interface {
	Session
	// Connect 连接服务
	// network: tcp,tcp4,tcp6,ws,wss
	Connect(network, host string, port int) error
	// Logger 日志
	Logger() zerologger.Logger
}
    Client 客户端,一般用来编写测试用例
type Config ¶
type Config struct {
	// MaxConnNum 连接数量上限,超过数量则拒绝连接
	// 负数表示不限制
	MaxConnNum int
	// Network 可选 "tcp", "tcp4", "tcp6"
	Network string
	Host    string
	Port    int
	Logger zerologger.Logger
	// loggerLevel 日志级别
	// 见 https://github.com/zerogo-hub/zero-helper/blob/main/logger/logger.go
	LoggerLevel int
	// OnServerStart 服务器启动时触发,套接字监听此时尚未启动
	OnServerStart func() error
	// OnServerClose 服务端关闭时触发,此时已关闭客户端连接
	OnServerClose func()
	// CloseTimeout 关闭服务器的等待时间,超过该时间服务器直接关闭
	CloseTimeout time.Duration
	// RecvBufferSize 在 session 中接收消息 buffer 大小
	RecvBufferSize int
	// RecvDeadLine 通信超时时间,最终调用 conn.SetReadDeadline
	RecvDeadLine time.Duration
	// RecvQueueSize 在 session 中接收到的消息队列大小,session 接收到消息后并非立即处理,而是丢到一个消息队列中,异步处理
	RecvQueueSize int
	// SendBufferSize 发送消息 buffer 大小
	SendBufferSize int
	// SendDeadLine SendDeadline
	SendDeadLine time.Duration
	// SendQueueSize 发送的消息队列大小,消息优先发送到 sesion 的消息队列,然后写入到套接字中
	SendQueueSize int
	// OnConnected 客户端连接到来时触发,此时客户端已经可以开始收发消息
	OnConnected ConnFunc
	// OnConnClose 客户端连接关闭触发,此时客户端不可以再收发消息
	OnConnClose ConnFunc
	// Datapack 封包与解包
	Datapack Datapack
	// WhetherCompress 是否需要对消息负载进行压缩
	WhetherCompress bool
	// WhetherCrypto 是否需要对消息负载进行加密
	WhetherCrypto bool
	// CompressThreshold 压缩的阈值,当消息负载长度超过该值时才会压缩
	CompressThreshold int
	// Compress 压缩与解压器
	Compress zerocompress.Compress
}
    Config 一些参数配置
type Crypto ¶
type Crypto interface {
	// Encrypt 加密
	Encrypt(in []byte) ([]byte, error)
	// Decrypt 解密
	Decrypt(in []byte) ([]byte, error)
}
    Crypto 加密与解密接口
type Datapack ¶
type Datapack interface {
	// HeadLen 消息头长度
	HeadLen() int
	// Pack 封包
	Pack(message Message, crypto Crypto) ([]byte, error)
	// Unpack 解包
	Unpack(buffer *zerocircle.Circle, crypto Crypto) ([]Message, error)
}
    Datapack 通讯数据封包与解包
type Message ¶
type Message interface {
	// SessionID 会话 ID,每一个连接都有一个唯一的会话 ID
	SessionID() SessionID
	// SetSessionID 设置 sessionID
	SetSessionID(sessionID SessionID)
	// ModuleID 功能模块,用来表示一个功能大类,比如商店、副本
	ModuleID() uint8
	// ActionID 功能细分,用来表示一个功能里面的具体功能,比如进入副本,退出副本
	ActionID() uint8
	// Flag 标记
	Flag() uint16
	// SN 自增编号
	SN() uint16
	// Code 错误码
	Code() uint16
	// Payload 负载
	Payload() []byte
	// String 打印消息
	String() string
}
    Message 通讯消息
type MessageHander ¶
MessageHander 处理客户端消息
type NewMessageFunc ¶
NewMessageFunc 创建一条消息
type Option ¶
type Option func(Peer)
Option 设置配置选项
func WithCloseTimeout ¶
WithCloseTimeout 关闭服务器的等待时间,超过该时间服务器直接关闭
func WithCompressThreshold ¶
WithCompressThreshold 压缩的阈值,当消息负载长度超过该值时才会压缩
func WithLoggerLevel ¶
WithLoggerLevel 设置日志级别 见 https://github.com/zerogo-hub/zero-helper/blob/main/logger/logger.go
func WithMaxConnNum ¶
WithMaxConnNum 连接数量上限,超过数量则拒绝连接 负数表示不限制
func WithOnConnClose ¶
WithOnConnClose 客户端连接关闭触发,此时客户端不可以再收发消息
func WithOnConnected ¶
WithOnConnected 客户端连接到来时触发,此时客户端已经可以开始收发消息
func WithOnServerClose ¶
func WithOnServerClose(onServerClose func()) Option
WithOnServerClose 服务端关闭时触发,此时已关闭客户端连接
func WithOnServerStart ¶
WithOnServerStart 服务器启动时触发,套接字监听此时尚未启动
func WithRecvBufferSize ¶
WithRecvBufferSize 在 session 中接收消息 buffer 大小
func WithRecvDeadLine ¶
WithRecvDeadLine 通信超时时间,最终调用 conn.SetReadDeadline
func WithRecvQueueSize ¶
WithRecvQueueSize 在 session 中接收到的消息队列大小,session 接收到消息后并非立即处理,而是丢到一个消息队列中,异步处理
func WithSendBufferSize ¶
WithSendBufferSize 发送消息 buffer 大小
func WithSendDeadLine ¶
WithSendDeadLine SendDeadline
func WithSendQueueSize ¶
WithSendQueueSize 发送的消息队列大小,消息优先发送到 sesion 的消息队列,然后写入到套接字中
func WithWhetherCompress ¶
WithWhetherCompress 是否需要对消息负载进行压缩
func WithWhetherCrypto ¶
WithWhetherCrypto 是否需要对消息负载进行加密
type Peer ¶
type Peer interface {
	// Start 开启服务,不会阻塞
	Start() error
	// Close 关闭服务,释放资源
	Close() error
	// Logger 日志
	Logger() zerologger.Logger
	// Router 路由器
	Router() Router
	// SessionManager 会话管理器
	SessionManager() SessionManager
	// ListenSignal 监听信号
	ListenSignal()
	PeerOption
}
    Peer 服务接口,比如表示 tcp 服务,udp 服务,websocket 服务
type PeerOption ¶
type PeerOption interface {
	// WithOption 设置配置
	WithOption(opts ...Option) Peer
	// SetMaxConnNum 连接数量上限,超过数量则拒绝连接
	// 负数表示不限制
	SetMaxConnNum(MaxConnNum int)
	// SetNetwork 可选 "tcp", "tcp4", "tcp6"
	SetNetwork(network string)
	// SetHost 设置监听地址
	SetHost(host string)
	// SetPort 设置监听端口
	SetPort(port int)
	// SetLogger 设置日志
	SetLogger(logger zerologger.Logger)
	// SetLoggerLevel 设置日志级别
	// 见 https://github.com/zerogo-hub/zero-helper/blob/main/logger/logger.go
	SetLoggerLevel(loggerLevel int)
	// SetOnServerStart 服务器启动时触发,套接字监听此时尚未启动
	SetOnServerStart(onServerStart func() error)
	// SetOnServerClose 服务端关闭时触发,此时已关闭客户端连接
	SetOnServerClose(onServerClose func())
	// SetCloseTimeout 关闭服务器的等待时间,超过该时间服务器直接关闭
	SetCloseTimeout(closeTimeout time.Duration)
	// SetRecvBufferSize 在 session 中接收消息 buffer 大小
	SetRecvBufferSize(recvBufferSize int)
	// SetRecvDeadLine 通信超时时间,最终调用 conn.SetReadDeadline
	SetRecvDeadLine(recvDeadLine time.Duration)
	// SetRecvQueueSize 在 session 中接收到的消息队列大小,session 接收到消息后并非立即处理,而是丢到一个消息队列中,异步处理
	SetRecvQueueSize(recvQueueSize int)
	// SetSendBufferSize 发送消息 buffer 大小
	SetSendBufferSize(recvBufferSize int)
	// SetSendDeadLine SendDeadline
	SetSendDeadLine(recvDeadLine time.Duration)
	// SetSendQueueSize 发送的消息队列大小,消息优先发送到 sesion 的消息队列,然后写入到套接字中
	SetSendQueueSize(recvQueueSize int)
	// SetOnConnected 客户端连接到来时触发,此时客户端已经可以开始收发消息
	SetOnConnected(onConnected ConnFunc)
	// SetOnConnClose 客户端连接关闭触发,此时客户端不可以再收发消息
	SetOnConnClose(onConnClose ConnFunc)
	// SetDatapack 封包与解包
	SetDatapack(datapack Datapack)
	// SetWhetherCompress 是否需要对消息负载进行压缩
	SetWhetherCompress(whetherCompress bool)
	// SetCompressThreshold 压缩的阈值,当消息负载长度超过该值时才会压缩
	SetCompressThreshold(compressThreshold int)
	// SetCompress 压缩与解压器
	SetCompress(compress zerocompress.Compress)
	// SetWhetherCrypto 是否需要对消息负载进行加密
	SetWhetherCrypto(whetherCrypto bool)
}
    PeerOption peer 的一些配置表设置
type Router ¶
type Router interface {
	// AddRouter 添加路由
	AddRouter(module, action uint8, handle HandlerFunc) error
	// Handler 路由处理
	Handler(message Message) (Message, error)
	// SetHandlerFunc 设置自定义路由处理函数
	SetHandlerFunc(handler HandlerFunc)
}
    Router 消息处理路由器
type Session ¶
type Session interface {
	// Run 让当前连接开始工作,比如收发消息,一般用于连接成功之后
	Run()
	// Close 停止接收客户端消息,也不再接收服务端消息。当已接收的服务端消息发送完毕后,断开连接
	Close()
	// Send 发送消息给客户端
	Send(message Message) error
	// SendCallback 发送消息给客户端,发送之后响应回调函数
	SendCallback(message Message, callback SendCallbackFunc) error
	// ID 获取 sessionID,每一条连接都分配有一个唯一的 id
	ID() SessionID
	// RemoteAddr 客户端地址信息
	RemoteAddr() net.Addr
	// Conn 获取原始的连接
	Conn() net.Conn
	// SetCrypto 设置加密解密的工具
	SetCrypto(crypto Crypto)
	// Config 配置
	Config() *Config
	// Get 获取自定义参数
	Get(key string) interface{}
	// Set 设置自定义参数
	Set(key string, value interface{})
}
    Session 表示与客户端的一条连接,也称为会话
type SessionManager ¶
type SessionManager interface {
	// GenSessionID 生成新的会话 ID
	GenSessionID() SessionID
	// Add 添加 Session
	Add(session Session)
	// Del 移除 Session
	Del(sessionID SessionID)
	// Get(sessionID SessionID) (Session, error)
	Get(sessionID SessionID) (Session, error)
	// Len 获取当前 Session 数量
	Len() int
	// Close 当前所有连接停止接收客户端消息,不再接收服务端消息,当已接收的服务端消息发送完毕后,断开连接
	// timeout 超时时间,如果超时仍未发送完已接收的服务端消息,也强行关闭连接
	Close()
	// Send 发送消息给客户端
	Send(sessionID SessionID, message Message) error
	// SendCallback  发送消息个客户端,发送之后进行回调
	SendCallback(sessionID SessionID, message Message, callback SendCallbackFunc) error
	// SendAll 给所有客户端发送消息
	SendAll(message Message)
}
    SessionManager 会话管理器
      
      Directories
      ¶
    
    | Path | Synopsis | 
|---|---|
| 
       peer
        | 
      |
| 
         
          
            kcp/example/client
            
            command
          
          
         
       | 
      |
| 
         
          
            kcp/example/server
            
            command
          
          
         
       | 
      |
| 
         
          
            tcp/example/client
            
            command
          
          
         
       | 
      |
| 
         
          
            tcp/example/server
            
            command
          
          
         
       | 
      |
| 
         
          
            ws/example/client
            
            command
          
          
         
       | 
      |
| 
         
          
            ws/example/server
            
            command
          
          
         
       |