tnet

package
v0.0.0-...-5b63d95 Latest Latest
Warning

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

Go to latest
Published: Oct 6, 2022 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CallBackToClient

func CallBackToClient(conn *net.TCPConn, data []byte, cnt int) error

============== 定义当前客户端链接的handle api ===========

func NewServer

func NewServer() tiface.IServer

创建一个服务器句柄

Types

type BaseRouter

type BaseRouter struct{}

实现router时,先嵌入这个BaseRouter基类,然后用户根据需要对这个基类的方法进行重写(类似Beego框架的实现方式)

func (*BaseRouter) Handle

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

处理conn业务的主方法

func (*BaseRouter) PostHandle

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

处理conn业务之后的钩子方法

func (*BaseRouter) PreHandle

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

在处理conn业务之前的钩子方法

type ConnManager

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

连接管理模块

func NewConnManager

func NewConnManager() *ConnManager

创建一个链接管理

func (*ConnManager) Add

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

添加链接

func (*ConnManager) ClearConn

func (connMgr *ConnManager) ClearConn()

清除并停止所有连接

func (*ConnManager) Get

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

利用ConnID获取链接

func (*ConnManager) Len

func (connMgr *ConnManager) Len() int

获取当前连接

func (*ConnManager) Remove

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

删除连接

type Connection

type Connection struct {
	// 当前Conn属于哪个Server
	TcpServer tiface.IServer

	// 当前连接的socket TCP套接字
	Conn *net.TCPConn

	// 当前连接的ID 也可以称作为SessionID,ID全局唯一
	ConnID uint32

	// V0.6 消息MsgId和对应业务处理api的消息管理模块
	MsgHandler tiface.IMsgHandle

	// 告知该链接已经退出/停止的channel(由Reader告知Writer退出)
	ExitBuffChan chan bool
	// contains filtered or unexported fields
}

创建连接的方法

func NewConnection

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

func (*Connection) GetConnID

func (c *Connection) GetConnID() uint32

获取当前连接ID

func (*Connection) GetProperty

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

获取链接属性

func (*Connection) GetTCPConnection

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

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

func (*Connection) RemoteAddr

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

获取远程客户端地址信息

func (*Connection) RemoveProperty

func (c *Connection) RemoveProperty(key string)

移除链接属性

func (*Connection) SendBuffMsg

func (c *Connection) SendBuffMsg(msgId uint32, data []byte) error

将数据发送给缓冲队列,通过专门从缓冲队列读数据的go routine写给客户端

func (*Connection) SendMsg

func (c *Connection) SendMsg(msgId uint32, data []byte) error

将要发送给客户端的数据,先进行封包,再发送给远程的TCP客户端

func (*Connection) SetProperty

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

设置链接属性

func (*Connection) Start

func (c *Connection) Start()

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

func (*Connection) StartReader

func (c *Connection) StartReader()

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

func (*Connection) StartWriter

func (c *Connection) StartWriter()

写消息Goroutine,监控管道msgChan并将数据发送给客户端

func (*Connection) Stop

func (c *Connection) Stop()

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

type DataPack

type DataPack struct{}

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

func NewDataPack

func NewDataPack() *DataPack

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

func (*DataPack) GetHeadLen

func (dp *DataPack) GetHeadLen() uint32

获取包头长度方法

func (*DataPack) Pack

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

封包方法(压缩数据)

func (*DataPack) Unpack

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

拆包方法(解压数据) 进行拆包的时候是分两次过程的,第一次得到msgId和dataLen,第二次根据dataLen读取消息数据,第二次是依赖第一次的dataLen结果, 所以Unpack只能解压出包头head的内容,得到msgId和dataLen。之后调用者再根据dataLen继续从io流中读取body中的数据。

type Message

type Message struct {
	// 消息的长度
	DataLen uint32
	// 消息的ID
	Id uint32
	// 消息的内容
	Data []byte
}

func NewMsgPackage

func NewMsgPackage(id uint32, data []byte) *Message

创建一个Message消息包

func (*Message) GetData

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

获取消息内容

func (*Message) GetDataLen

func (msg *Message) GetDataLen() uint32

获取消息数据段长度

func (*Message) GetMsgId

func (msg *Message) GetMsgId() uint32

获取消息ID

func (*Message) SetData

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

设置消息内容

func (*Message) SetDataLen

func (msg *Message) SetDataLen(len uint32)

设置消息数据段长度

func (*Message) SetMsgId

func (msg *Message) SetMsgId(msgId uint32)

设置消息ID

type MsgHandle

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

消息处理模块的实现

func NewMsgHandle

func NewMsgHandle() *MsgHandle

创建MsgHandle的方法

func (*MsgHandle) AddRouter

func (mh *MsgHandle) AddRouter(msgId uint32, router tiface.IRouter)

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

func (*MsgHandle) DoMsgHandler

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

马上以非阻塞方式处理消息,调度/执行对应的Router消息处理方法

func (*MsgHandle) SendMsgToTaskQueue

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

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

func (*MsgHandle) StartOneWorker

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

启动一个worker

func (*MsgHandle) StartWorkerPool

func (mh *MsgHandle) StartWorkerPool()

启动worker工作池(只执行一次,因为一个框架只能有一个工作池)

type Request

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

func (*Request) GetConnection

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

获取请求的链接信息

func (*Request) GetData

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

获取请求的消息数据

func (*Request) GetMsgID

func (r *Request) GetMsgID() uint32

获取请求的消息的ID

type Server

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

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

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

func (*Server) AddRouter

func (s *Server) AddRouter(msgId uint32, router tiface.IRouter)

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

func (*Server) CallOnConnStart

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

调用连接OnConnStart Hook函数

func (*Server) CallOnConnStop

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

调用连接OnConnStop Hook函数

func (*Server) GetConnMgr

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

得到当前server的链接管理模块

func (*Server) Serve

func (s *Server) Serve()

运行服务

func (*Server) SetOnConnStart

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

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

func (*Server) SetOnConnStop

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

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

func (*Server) Start

func (s *Server) Start()

开启网络服务

func (*Server) Stop

func (s *Server) Stop()

停止服务

Jump to

Keyboard shortcuts

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