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" // 默认 tcp4 Network string // Host 地址 // 默认 127.0.0.1 Host string // Port 端口 // 默认 8001 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 关闭服务器的等待时间,超过该时间服务器直接关闭 // 默认 5 秒 CloseTimeout time.Duration // RecvBufferSize 在 session 中接收消息 buffer 大小 // 默认 8K RecvBufferSize int // RecvDeadLine 通信超时时间,最终调用 conn.SetReadDeadline RecvDeadLine time.Duration // RecvQueueSize 每一个 session 的接收消息队列大小,session 接收到消息后并非立即处理,而是丢到一个消息队列中,异步处理 // 默认 128 RecvQueueSize int // SendBufferSize 发送消息 buffer 大小 // 默认 8K SendBufferSize int // SendDeadLine SendDeadline SendDeadLine time.Duration // SendQueueSize 每一个 session 的发送消息队列大小,消息优先发送到 sesion 的消息队列,然后写入到套接字中 // 默认 128 SendQueueSize int // OnConnected 客户端连接到来时触发,此时客户端已经可以开始收发消息 OnConnected ConnFunc // OnConnClose 客户端连接关闭触发,此时客户端不可以再收发消息 OnConnClose ConnFunc // Datapack 封包与解包 Datapack Datapack // WhetherCompress 是否需要对消息负载进行压缩 // 默认 false WhetherCompress bool // WhetherCrypto 是否需要对消息负载进行加密 // 默认 false WhetherCrypto bool // CompressThreshold 压缩的阈值,当消息负载长度超过该值时才会压缩 // 默认 0 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 会话管理器