znet

package
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 9, 2022 License: GPL-3.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetLogger

func GetLogger() ziface.ILogger

GetLogger 获取日志处理器

func LoadZapLogger

func LoadZapLogger(level LogLevel) ziface.ILogger

LoadZapLogger 加载zap日志处理器 默认使用zap sugar

func NewDataPack

func NewDataPack() ziface.Packet

NewDataPack 封包拆包实例初始化方法

func NewServer

func NewServer(opts ...Option) ziface.IServer

NewServer 创建一个服务器句柄

func SetLogger

func SetLogger(logHandler ziface.ILogger, level LogLevel)

SetLogger 设置日志处理器

Types

type BaseRouter

type BaseRouter struct{}

BaseRouter 实现router时,先嵌入这个基类,然后根据需要对这个基类的方法进行重写

func (*BaseRouter) Handle

func (br *BaseRouter) Handle(req ziface.IRequest)

Handle -

func (*BaseRouter) PostHandle

func (br *BaseRouter) PostHandle(req ziface.IRequest)

PostHandle -

func (*BaseRouter) PreHandle

func (br *BaseRouter) PreHandle(req ziface.IRequest)

PreHandle -

type ConnManager

type ConnManager struct {
	// contains filtered or unexported fields
}

ConnManager 连接管理模块

func NewConnManager

func NewConnManager() *ConnManager

NewConnManager 创建一个链接管理

func (*ConnManager) Add

func (connMgr *ConnManager) Add(conn ziface.IConnection)

Add 添加链接

func (*ConnManager) ClearConn

func (connMgr *ConnManager) ClearConn()

ClearConn 清除并停止所有连接

func (*ConnManager) ClearOneConn

func (connMgr *ConnManager) ClearOneConn(connID uint32)

ClearOneConn 利用ConnID获取一个链接 并且删除

func (*ConnManager) Get

func (connMgr *ConnManager) Get(connID uint32) (ziface.IConnection, error)

Get 利用ConnID获取链接

func (*ConnManager) Len

func (connMgr *ConnManager) Len() int

Len 获取当前连接

func (*ConnManager) Remove

func (connMgr *ConnManager) Remove(conn ziface.IConnection)

Remove 删除连接

type Connection

type Connection struct {
	// 当前Conn属于哪个Server
	TCPServer ziface.IServer
	// 当前连接的socket TCP套接字
	Conn *net.TCPConn
	// 当前连接的ID 也可以称作为SessionID,ID全局唯一
	ConnID uint32
	// 消息管理MsgID和对应处理方法的消息管理模块
	MsgHandler ziface.IMsgHandle

	sync.RWMutex
	// contains filtered or unexported fields
}

Connection 链接

func NewConnection

func NewConnection(server ziface.IServer, conn *net.TCPConn, connID uint32, msgHandler ziface.IMsgHandle) *Connection

NewConnection 创建连接的方法

func (*Connection) Context

func (c *Connection) Context() context.Context

返回ctx,用于用户自定义的go程获取连接退出状态

func (*Connection) GetConnID

func (c *Connection) GetConnID() uint32

GetConnID 获取当前连接ID

func (*Connection) GetProperty

func (c *Connection) GetProperty(key string) (interface{}, error)

GetProperty 获取链接属性

func (*Connection) GetTCPConnection

func (c *Connection) GetTCPConnection() *net.TCPConn

GetTCPConnection 从当前连接获取原始的socket TCPConn

func (*Connection) RemoteAddr

func (c *Connection) RemoteAddr() net.Addr

RemoteAddr 获取远程客户端地址信息

func (*Connection) RemoveProperty

func (c *Connection) RemoveProperty(key string)

RemoveProperty 移除链接属性

func (*Connection) SendBuffMsg

func (c *Connection) SendBuffMsg(msgID, sn uint8, data []byte) error

SendBuffMsg 发送BuffMsg

func (*Connection) SendMsg

func (c *Connection) SendMsg(msgID, sn uint8, data []byte) error

SendMsg 直接将Message数据发送数据给远程的TCP客户端

func (*Connection) SetProperty

func (c *Connection) SetProperty(key string, value interface{})

SetProperty 设置链接属性

func (*Connection) Start

func (c *Connection) Start()

Start 启动连接,让当前连接开始工作

func (*Connection) StartReader

func (c *Connection) StartReader()

StartReader 读消息Goroutine,用于从客户端中读取数据

func (*Connection) StartWriter

func (c *Connection) StartWriter()

StartWriter 写消息Goroutine, 用户将数据发送给客户端

func (*Connection) Stop

func (c *Connection) Stop()

Stop 停止连接,结束当前连接状态M

type DataPack

type DataPack struct{}

DataPack 封包拆包类实例,暂时不需要成员

func (*DataPack) GenerateSn

func (dp *DataPack) GenerateSn() uint8

GenerateSn 生成序列号

func (*DataPack) GetHeadLen

func (dp *DataPack) GetHeadLen() uint16

GetHeadLen 获取包头长度方法

func (*DataPack) Pack

func (dp *DataPack) Pack(msg ziface.IMessage) ([]byte, error)

Pack 封包方法(压缩数据)

func (*DataPack) Unpack

func (dp *DataPack) Unpack(binaryData []byte) (ziface.IMessage, error)

Unpack 拆包方法(解压数据)

type LogLevel

type LogLevel uint8

type Message

type Message struct {
	MagicCode uint16 // 魔数(小安必须)
	ID        uint8  // 消息的ID(命令字,小安必须)
	Sn        uint8  // 序列号(小安必须)
	DataLen   uint16 // 消息的长度(小安必须)
	Data      []byte // 消息的内容
}

Message 消息

func NewMsgPackage

func NewMsgPackage(ID, Sn uint8, data []byte) *Message

NewMsgPackage 创建一个Message消息包

func (*Message) GetData

func (msg *Message) GetData() []byte

GetData 获取消息内容

func (*Message) GetDataLen

func (msg *Message) GetDataLen() uint16

GetDataLen 获取消息数据段长度

func (*Message) GetMsgID

func (msg *Message) GetMsgID() uint8

GetMsgID 获取消息ID

func (*Message) GetSn

func (msg *Message) GetSn() uint8

GetSn 获取头部序列号

func (*Message) SetData

func (msg *Message) SetData(data []byte)

SetData 设计消息内容

func (*Message) SetDataLen

func (msg *Message) SetDataLen(len uint16)

SetDataLen 设置消息数据段长度

func (*Message) SetMsgID

func (msg *Message) SetMsgID(msgID uint8)

SetMsgID 设计消息ID

type MsgHandle

type MsgHandle struct {
	Apis           map[uint8]ziface.IRouter // 存放每个MsgID 所对应的处理方法的map属性
	WorkerPoolSize uint32                   // 业务工作Worker池的数量
	TaskQueue      []chan ziface.IRequest   // Worker负责取任务的消息队列
}

MsgHandle -

func NewMsgHandle

func NewMsgHandle() *MsgHandle

NewMsgHandle 创建MsgHandle

func (*MsgHandle) AddRouter

func (mh *MsgHandle) AddRouter(msgID uint8, router ziface.IRouter)

AddRouter 为消息添加具体的处理逻辑

func (*MsgHandle) DoMsgHandler

func (mh *MsgHandle) DoMsgHandler(request ziface.IRequest)

DoMsgHandler 处理消息 TODO: 需要探讨这里是否使用goroutine执行

func (*MsgHandle) SendMsgToTaskQueue

func (mh *MsgHandle) SendMsgToTaskQueue(request ziface.IRequest)

SendMsgToTaskQueue 将消息交给TaskQueue,由worker进行处理

func (*MsgHandle) StartOneWorker

func (mh *MsgHandle) StartOneWorker(workerID int, taskQueue chan ziface.IRequest)

StartOneWorker 启动一个Worker工作流程

func (*MsgHandle) StartWorkerPool

func (mh *MsgHandle) StartWorkerPool()

StartWorkerPool 启动worker工作池

type Option

type Option func(s *Server)

func WithLogger

func WithLogger(logger ziface.ILogger) Option

WithLogger 定义日志处理器

func WithPacket

func WithPacket(pack ziface.Packet) Option

WithPacket 只要实现Packet 接口可自由实现数据包解析格式,如果没有则使用默认解析格式

type Request

type Request struct {
	// contains filtered or unexported fields
}

Request 请求

func (*Request) GetConnection

func (r *Request) GetConnection() ziface.IConnection

GetConnection 获取请求连接信息

func (*Request) GetData

func (r *Request) GetData() []byte

GetData 获取请求消息的数据

func (*Request) GetMsgID

func (r *Request) GetMsgID() uint8

GetMsgID 获取请求的消息的ID

func (*Request) GetSn

func (r *Request) GetSn() uint8

GetSn 获取请求的消息的序列号

type Server

type Server struct {
	// 服务器的名称
	Name string
	// tcp4 or other
	IPVersion string
	// 服务绑定的IP地址
	IP string
	// 服务绑定的端口
	Port int

	// 当前Server的链接管理器
	ConnMgr ziface.IConnManager
	// 该Server的连接创建时Hook函数
	OnConnStart func(conn ziface.IConnection)
	// 该Server的连接断开时的Hook函数
	OnConnStop func(conn ziface.IConnection)
	// contains filtered or unexported fields
}

Server 接口实现,定义一个Server服务类

func (*Server) AddRouter

func (s *Server) AddRouter(msgID uint8, router ziface.IRouter)

AddRouter 路由功能:给当前服务注册一个路由业务方法,供客户端链接处理使用

func (*Server) CallOnConnStart

func (s *Server) CallOnConnStart(conn ziface.IConnection)

CallOnConnStart 调用连接OnConnStart Hook函数

func (*Server) CallOnConnStop

func (s *Server) CallOnConnStop(conn ziface.IConnection)

CallOnConnStop 调用连接OnConnStop Hook函数

func (*Server) GetConnMgr

func (s *Server) GetConnMgr() ziface.IConnManager

GetConnMgr 得到链接管理

func (*Server) Packet

func (s *Server) Packet() ziface.Packet

func (*Server) Serve

func (s *Server) Serve()

Serve 运行服务

func (*Server) SetOnConnStart

func (s *Server) SetOnConnStart(hookFunc func(ziface.IConnection))

SetOnConnStart 设置该Server的连接创建时Hook函数

func (*Server) SetOnConnStop

func (s *Server) SetOnConnStop(hookFunc func(ziface.IConnection))

SetOnConnStop 设置该Server的连接断开时的Hook函数

func (*Server) Start

func (s *Server) Start()

Start 开启网络服务 流程: 1.启动工作池(根据数量启动Worker协程)-> 监听 -> 等待客户端连接 -> 为每个连接创建Reader和Writer-> 根据utils.GlobalObject.WorkerPoolSize判断是否利用工作池处理Reader消息 -> MsgHandler处理消息(PreHandle, Handle, PostHandle)

func (*Server) Stop

func (s *Server) Stop()

Stop 停止服务

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL