gnet

package
v1.0.2 Latest Latest
Warning

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

Go to latest
Published: Aug 2, 2022 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Tcp = iota
	WebSocket
	Http
)
View Source
const HeartBeatTime = 300

HeartBeatTime 心跳时长 单位:秒

View Source
const MaxResTime = 10 // 最大响应时长,单位ms

Variables

View Source
var RouteItemMgr = &msgRouteMgr{
	routes:   make([]*RouteItem, 0),
	protoMap: make(map[string]uint32),
	msgIdMap: make(map[uint32]reflect.Type),
}

Functions

This section is empty.

Types

type ConnCallback

type ConnCallback func(conn IConnection)

ConnCallback 连接回调

type ConnManager

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

ConnManager 链接管理器

func NewConnManager

func NewConnManager() *ConnManager

NewConnManager 创建新的链接管理器

func (*ConnManager) Add

func (c *ConnManager) Add(conn IConnection)

Add 添加链接

func (*ConnManager) BroadcastMsg

func (c *ConnManager) BroadcastMsg(msgId uint32, data []byte)

BroadcastMsg 广播数据

func (*ConnManager) ClearConn

func (c *ConnManager) ClearConn()

ClearConn 删除并停止所有链接

func (*ConnManager) ClearOneConn

func (c *ConnManager) ClearOneConn(connID uint32)

ClearOneConn 删除指定ConnID的链接

func (*ConnManager) Get

func (c *ConnManager) Get(connID uint32) (IConnection, error)

Get 根据ConnID获取链接

func (*ConnManager) Len

func (c *ConnManager) Len() int32

func (*ConnManager) Remove

func (c *ConnManager) Remove(conn IConnection)

Remove 删除链接

type Group

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

Group 路由组

func (*Group) AddRoute

func (g *Group) AddRoute(path string, callback HandlerCallback)

AddRoute 添加路由

type HandlerCallback

type HandlerCallback interface{}

type HandlerFunc

type HandlerFunc func(request *Request, msg proto.Message)

type IConnection

type IConnection interface {
	Start()                                  // 启动连接,让当前连接开始工作
	Stop()                                   // 停止连接,结束当前连接状态
	GetTcpConnection() *net.TCPConn          // 从当前连接获取原始的socket TCPConn
	GetWsConnection() *websocket.Conn        // 从当前连接获取原始的websocket conn
	GetProtocolType() ProtocolType           // 获取链接协议类型, TCP/WebSocket
	GetSocket() ISocket                      // 获取链接的Socket对象
	GetConnID() uint32                       // 获取当前连接ID
	IsClosed() bool                          // 当前链接是否已关闭
	SetClosed() bool                         // 设置关闭状态,设置成功返回true,已关闭则返回false
	RemoteAddr() net.Addr                    // 获取远程客户端地址信息
	SendMsg(msgId uint32, data []byte) error // 发送消息
}

IConnection 定义连接接口

type ISocket

type ISocket interface {
	GetName() string                           // 获取Socket对象名称
	GetId() string                             // 获取Socket对象ID
	GetHost() string                           // 获取监听(Server)/链接(Client)的主机地址
	GetPort() int32                            // 获取监听(Server)/链接(Client)的端口
	Start()                                    // 启动
	Stop()                                     // 停止运行
	Run()                                      // 运行
	GetRouter() *Router                        // 获取消息路由器
	GetConnMgr() *ConnManager                  // 获取链接管理器(Client的ConnMgr只会有一个Conn)
	SetOnConnStart(startCallBack ConnCallback) // 设置有新的链接Hook函数
	SetOnConnStop(stopCallback ConnCallback)   // 设置有链接断开Hook函数
	CallOnConnStart(conn IConnection)          // 调用链接OnConnStart Hook函数
	CallOnConnStop(conn IConnection)           // 调用链接OnConnStop Hook函数
}

ISocket Socket抽象接口,可以是Sever端/Client端

type Msg

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

func NewMsg

func NewMsg(msgId uint32, data []byte) *Msg

NewMsg 创建一个Message对象

func (*Msg) GetData

func (m *Msg) GetData() []byte

GetData 获取消息内容

func (*Msg) GetDataLen

func (m *Msg) GetDataLen() uint32

GetDataLen 获取消息内容段长度

func (*Msg) GetMsgId

func (m *Msg) GetMsgId() uint32

GetMsgId 获取消息名称

func (*Msg) SetData

func (m *Msg) SetData(data []byte)

SetData 设置消息内容

func (*Msg) SetDataLen

func (m *Msg) SetDataLen(len uint32)

SetDataLen 设置消息数据段长度

func (*Msg) SetMsgId

func (m *Msg) SetMsgId(msgId uint32)

SetMsgId 设置消息名称

func (*Msg) WithData

func (m *Msg) WithData(data []byte) *Msg

WithData 携带消息内容

func (*Msg) WithMsgId

func (m *Msg) WithMsgId(msgId uint32) *Msg

WithMsgId 携带消息名称

type MsgHandler

type MsgHandler struct {
	WorkerPoolSize uint32          // 业务工作Worker池的数量
	WorkerTaskSize uint32          // 每个Worker的可等待执行Task数量
	TaskQueue      []chan *Request // Worker负责取任务的消息队列
	TaskExit       []chan bool
	Router         *Router // 路由
}

MsgHandler 消息处理器模块,msgHandler会有多个worker回来同时处理消息,conn发送的消息通过connId取模落入到某一个worker处理

func NewMsgHandler

func NewMsgHandler(workerPoolSize uint32, workerTaskSize uint32) *MsgHandler

func (*MsgHandler) HandleMsg

func (mh *MsgHandler) HandleMsg(req *Request)

HandleMsg 已非阻塞方式处理消息

func (*MsgHandler) SendMsgToTaskQueue

func (mh *MsgHandler) SendMsgToTaskQueue(request *Request)

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

func (*MsgHandler) SetRouter

func (mh *MsgHandler) SetRouter(router *Router)

SetRouter 为消息添加具体的处理逻辑(路由)

func (*MsgHandler) StartWorkerPool

func (mh *MsgHandler) StartWorkerPool()

StartWorkerPool 启动worker工作池

func (*MsgHandler) StopWorkerPool

func (mh *MsgHandler) StopWorkerPool()

StopWorkerPool 关闭Work线程池

type ProtocolType

type ProtocolType uint8

ProtocolType 协议类型

type Request

type Request struct {
	Conn IConnection // 已经和客户端建立好的 链接
	Msg  *Msg        // 客户端请求的数据
}

Request 请求抽象

func NewRequest

func NewRequest(conn IConnection, msg *Msg) *Request

func (*Request) GetConnId

func (r *Request) GetConnId() uint32

GetConnId 获取链接ID

func (*Request) GetConnection

func (r *Request) GetConnection() IConnection

GetConnection 获取连接信息

func (*Request) GetMessage

func (r *Request) GetMessage() *Msg

GetMessage 获取请求的消息

type RouteItem

type RouteItem struct {
	MsgId uint32 `json:"msgId"`
	Proto string `json:"proto"`
	Route string `json:"route"`
}

type Router

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

Router 路由器

func (*Router) Group

func (r *Router) Group(prefix string) *Group

func (*Router) Run

func (r *Router) Run(req *Request)

Jump to

Keyboard shortcuts

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