network

package
v0.0.28 Latest Latest
Warning

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

Go to latest
Published: Oct 13, 2023 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ClientServer int32 = 0
	InnerServer  int32 = 1
)

Variables

This section is empty.

Functions

func SendBufMsg

func SendBufMsg(channel Channel, msgId int32, sessionId int64, senderId int64, data []byte) error

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

func SendClientMsg

func SendClientMsg(c Channel, msgId int32, data []byte) error

发送客户端消息

func SendClientProtoMsg

func SendClientProtoMsg(channel Channel, msgId int32, msg proto.Message) error

发送proto消息

func SendMsg

func SendMsg(channel Channel, msgId int32, sessionId int64, senderId int64, data []byte) error

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

func SendProtoMsg

func SendProtoMsg(channel Channel, msgId int32, sessionId int64, senderId int64, msg proto.Message) error

发送proto消息

Types

type Channel

type Channel interface {
	//启动连接,让当前连接开始工作
	Start()
	//停止连接,结束当前连接状态M
	Stop()
	//从当前连接获取原始的socket TCPConn
	GetTCPConnection() *net.TCPConn
	//获取当前连接ID
	GetConnID() uint32
	//获取远程客户端地址信息
	RemoteAddr() net.Addr
	//发送消息
	SendMsg(message TcpMessage) error
	//连接是否关闭
	IsClose() bool
	//关联的Server
	GetServer() Server
	//设置链接属性
	SetProperty(key string, value interface{})
	//获取链接属性
	GetProperty(key string) (interface{}, error)
	//移除链接属性
	RemoveProperty(key string)
	//无缓冲管道,用于读、写两个goroutine之间的消息通信
	GetMsgChan() chan []byte
	//有缓冲管道,用于读、写两个goroutine之间的消息通信
	GetMsgBuffChan() chan []byte
}

定义连接接口

func NewChannel

func NewChannel(server Server, conn *net.TCPConn, connID uint32, messageDistribute MessageDistribute) Channel

创建连接的方法

func NewClientChannel

func NewClientChannel(conn net.Conn, messageDistribute MessageDistribute, client Client) Channel

创建连接的方法

type ChannelManager

type ChannelManager interface {
	Add(conn Channel)                   //添加链接
	Remove(conn Channel)                //删除连接
	Get(connID uint32) (Channel, error) //利用ConnID获取链接
	Len() int                           //获取当前连接
	ClearConn()                         //删除并停止所有链接
}

连接管理抽象层

func NewChannelManager

func NewChannelManager() ChannelManager

创建一个链接管理

type Client

type Client interface {
	//启动客户端方法
	Start()
	//停止客户端方法
	Stop()
	//开启业务服务方法
	Run()
	//得到链接
	GetChannel() Channel
	//设置该Client的连接创建时Hook函数
	SetChannelActive(func(Channel))
	//设置该Client的连接断开时的Hook函数
	SetChannelInactive(func(Channel))
	//调用连接OnConnStart Hook函数
	ChannelActive(conn Channel)
	//调用连接OnConnStop Hook函数
	ChannelInactive(conn Channel)
}

定义服务器接口

func NewClient

func NewClient(name, url string, messageDistribute MessageDistribute) (Client, error)

创建网络服务

type ClientDataPack

type ClientDataPack struct{}

客户端封包拆包类实例,暂时不需要成员 实现DataPack

func NewClientDataPack

func NewClientDataPack() *ClientDataPack

封包拆包实例初始化方法

func (*ClientDataPack) GetHeadLen

func (dp *ClientDataPack) GetHeadLen() uint32

获取包头长度方法 ,不包括消息长度

func (*ClientDataPack) Pack

func (dp *ClientDataPack) Pack(msg TcpMessage) ([]byte, error)

封包方法(压缩数据)

func (*ClientDataPack) Unpack

func (dp *ClientDataPack) Unpack(binaryData []byte, msgLength uint32) (TcpMessage, error)

拆包方法(解压数据) 消息长度已经被截取

type ClientMessage

type ClientMessage struct {
	DataLen uint32  //消息的长度
	Id      int32   //消息的ID
	Data    []byte  //消息的内容
	Time    int64   //消息时间
	Channel Channel //连接会话
}

客户端消息体 实现 Message

func NewClientMessage

func NewClientMessage(id int32, data []byte) *ClientMessage

创建一个Message消息包

func (*ClientMessage) GetChannel

func (msg *ClientMessage) GetChannel() Channel

func (*ClientMessage) GetData

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

获取消息内容

func (*ClientMessage) GetDataLen

func (msg *ClientMessage) GetDataLen() uint32

获取消息数据段长度

func (*ClientMessage) GetMsgId

func (msg *ClientMessage) GetMsgId() int32

获取消息ID

func (*ClientMessage) GetObjectId

func (msg *ClientMessage) GetObjectId() int64

func (*ClientMessage) GetSessionId

func (msg *ClientMessage) GetSessionId() int64

func (*ClientMessage) GetTime

func (msg *ClientMessage) GetTime() int64

时间

func (*ClientMessage) SetChannel

func (msg *ClientMessage) SetChannel(channel Channel)

func (*ClientMessage) SetData

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

设计消息内容

func (*ClientMessage) SetDataLen

func (msg *ClientMessage) SetDataLen(len uint32)

设置消息数据段长度

func (*ClientMessage) SetMsgId

func (msg *ClientMessage) SetMsgId(msgId int32)

设计消息ID

func (*ClientMessage) SetTime

func (msg *ClientMessage) SetTime(time int64)

时间

type DataPack

type DataPack interface {
	//获取包头长度方法
	GetHeadLen() uint32
	//封包方法
	Pack(msg TcpMessage) ([]byte, error)
	//拆包方法
	Unpack([]byte, uint32) (TcpMessage, error)
}

封包数据和拆包数据 直接面向TCP连接中的数据流,为传输数据添加头部信息,用于处理TCP粘包问题。

type HandUnregisterMessageMethod

type HandUnregisterMessageMethod func(message TcpMessage)

处理未注册消息,如转发到大厅

type HandlerMethod

type HandlerMethod func(message TcpMessage) bool

type InnerDataPack

type InnerDataPack struct{}

内部通信封包拆包类实例,暂时不需要成员

func NewInnerDataPack

func NewInnerDataPack() *InnerDataPack

封包拆包实例初始化方法

func (*InnerDataPack) GetHeadLen

func (dp *InnerDataPack) GetHeadLen() uint32

获取包头长度方法 ,不包括消息长度

func (*InnerDataPack) Pack

func (dp *InnerDataPack) Pack(msg TcpMessage) ([]byte, error)

封包方法(压缩数据)

func (*InnerDataPack) Unpack

func (dp *InnerDataPack) Unpack(binaryData []byte, msgLength uint32) (TcpMessage, error)

拆包方法(解压数据) 消息长度已经被截取

type InnerMessage

type InnerMessage struct {
	DataLen   uint32  //消息的长度
	Id        int32   //消息的ID
	Data      []byte  //消息的内容
	SessionId int64   //会话id
	SenderId  int64   //发送者id
	Channel   Channel //连接会话
}

内部 消息体 实现TcpMessage

func NewInnerMessage

func NewInnerMessage(id int32, data []byte, senderId int64, sessionId int64) *InnerMessage

创建一个Message消息包

func (*InnerMessage) GetChannel

func (msg *InnerMessage) GetChannel() Channel

func (*InnerMessage) GetData

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

获取消息内容

func (*InnerMessage) GetDataLen

func (msg *InnerMessage) GetDataLen() uint32

获取消息数据段长度

func (*InnerMessage) GetMsgId

func (msg *InnerMessage) GetMsgId() int32

获取消息ID

func (*InnerMessage) GetObjectId

func (msg *InnerMessage) GetObjectId() int64

func (*InnerMessage) GetSessionId

func (msg *InnerMessage) GetSessionId() int64

func (*InnerMessage) GetTime

func (msg *InnerMessage) GetTime() int64

时间

func (*InnerMessage) SetChannel

func (msg *InnerMessage) SetChannel(channel Channel)

func (*InnerMessage) SetData

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

设计消息内容

func (*InnerMessage) SetDataLen

func (msg *InnerMessage) SetDataLen(len uint32)

设置消息数据段长度

func (*InnerMessage) SetMsgId

func (msg *InnerMessage) SetMsgId(msgId int32)

设计消息ID

func (*InnerMessage) SetTime

func (msg *InnerMessage) SetTime(time int64)

时间

type MessageDistribute

type MessageDistribute interface {
	//处理消息
	RunHandler(message TcpMessage)
	//为消息添加具体的处理逻辑
	RegisterHandler(msgId int32, handler *TcpHandler)
	//启动worker工作池
	StartWorkerPool()
	//将消息交给TaskQueue,由worker进行处理
	SendMessageToTaskQueue(message TcpMessage)
}

消息分发管理抽象层

func NewMessageDistribute

func NewMessageDistribute(workPoolSize uint32, unregisterMethod HandUnregisterMessageMethod) MessageDistribute

type Server

type Server interface {
	//启动服务器方法
	Start()
	//停止服务器方法
	Stop()
	//开启业务服务方法
	Run()
	//路由功能:给当前服务注册一个路由业务方法,供客户端链接处理使用
	RegisterHandler(msgId int32, handler HandlerMethod)
	//得到链接管理
	GetChannelManager() ChannelManager
	//设置该Server的连接创建时Hook函数
	SetChannelActive(func(Channel))
	//设置该Server的连接断开时的Hook函数
	SetChannelInactive(func(Channel))
	//调用连接OnConnStart Hook函数
	ChannelActive(conn Channel)
	//调用连接OnConnStop Hook函数
	ChannelInactive(conn Channel)
	//服务器类型 0客户端,1内部服务器
	GetServerType() int32
}

定义服务器接口

func NewServer

func NewServer(name, url string, serverType int32, unregisterMethod HandUnregisterMessageMethod) (Server, error)

创建网络服务

type TcpHandler

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

路由接口, 这里面路由是 使用框架者给该链接自定的 处理业务方法 路由里的TcpMessage 则包含用该链接的链接信息和该链接的请求数据信息

func NewTcpHandler

func NewTcpHandler(method HandlerMethod) *TcpHandler

func (*TcpHandler) GetRunMethod

func (this *TcpHandler) GetRunMethod() HandlerMethod

获取运行方法

type TcpMessage

type TcpMessage interface {
	//获取消息数据段长度
	GetDataLen() uint32
	//获取消息ID
	GetMsgId() int32
	//获取消息内容
	GetData() []byte
	//获取消息时间戳
	GetTime() int64
	//会话id
	GetSessionId() int64
	//对象唯一id
	GetObjectId() int64
	//设置消息ID
	SetMsgId(int32)
	//设置消息内容
	SetData([]byte)
	//设置消息数据段长度
	SetDataLen(uint32)
	//设置时间戳
	SetTime(int64)
	//获取Channel
	GetChannel() Channel
	//设置Channel
	SetChannel(Channel)
}

将请求的一个消息封装到message中,定义抽象层接口

Jump to

Keyboard shortcuts

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