Documentation ¶
Index ¶
- Constants
- func SendBufMsg(channel Channel, msgId int32, sessionId int64, senderId int64, data []byte) error
- func SendClientMsg(c Channel, msgId int32, data []byte) error
- func SendClientProtoMsg(channel Channel, msgId int32, msg proto.Message) error
- func SendMsg(channel Channel, msgId int32, sessionId int64, senderId int64, data []byte) error
- func SendProtoMsg(channel Channel, msgId int32, sessionId int64, senderId int64, ...) error
- type Channel
- type ChannelManager
- type Client
- type ClientDataPack
- type ClientMessage
- func (msg *ClientMessage) GetChannel() Channel
- func (msg *ClientMessage) GetData() []byte
- func (msg *ClientMessage) GetDataLen() uint32
- func (msg *ClientMessage) GetMsgId() int32
- func (msg *ClientMessage) GetObjectId() int64
- func (msg *ClientMessage) GetSessionId() int64
- func (msg *ClientMessage) GetTime() int64
- func (msg *ClientMessage) SetChannel(channel Channel)
- func (msg *ClientMessage) SetData(data []byte)
- func (msg *ClientMessage) SetDataLen(len uint32)
- func (msg *ClientMessage) SetMsgId(msgId int32)
- func (msg *ClientMessage) SetTime(time int64)
- type DataPack
- type HandUnregisterMessageMethod
- type HandlerMethod
- type InnerDataPack
- type InnerMessage
- func (msg *InnerMessage) GetChannel() Channel
- func (msg *InnerMessage) GetData() []byte
- func (msg *InnerMessage) GetDataLen() uint32
- func (msg *InnerMessage) GetMsgId() int32
- func (msg *InnerMessage) GetObjectId() int64
- func (msg *InnerMessage) GetSessionId() int64
- func (msg *InnerMessage) GetTime() int64
- func (msg *InnerMessage) SetChannel(channel Channel)
- func (msg *InnerMessage) SetData(data []byte)
- func (msg *InnerMessage) SetDataLen(len uint32)
- func (msg *InnerMessage) SetMsgId(msgId int32)
- func (msg *InnerMessage) SetTime(time int64)
- type MessageDistribute
- type Server
- type TcpHandler
- type TcpMessage
Constants ¶
View Source
const ( ClientServer int32 = 0 InnerServer int32 = 1 )
Variables ¶
This section is empty.
Functions ¶
func SendBufMsg ¶
直接将Message数据发送数据给远程的TCP客户端
func SendClientProtoMsg ¶
发送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() //删除并停止所有链接 }
连接管理抽象层
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) }
定义服务器接口
type ClientDataPack ¶
type ClientDataPack struct{}
客户端封包拆包类实例,暂时不需要成员 实现DataPack
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 (*ClientMessage) GetChannel ¶
func (msg *ClientMessage) GetChannel() Channel
func (*ClientMessage) GetObjectId ¶
func (msg *ClientMessage) GetObjectId() int64
func (*ClientMessage) GetSessionId ¶
func (msg *ClientMessage) GetSessionId() int64
func (*ClientMessage) SetChannel ¶
func (msg *ClientMessage) SetChannel(channel Channel)
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 (*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) GetObjectId ¶
func (msg *InnerMessage) GetObjectId() int64
func (*InnerMessage) GetSessionId ¶
func (msg *InnerMessage) GetSessionId() int64
func (*InnerMessage) SetChannel ¶
func (msg *InnerMessage) SetChannel(channel Channel)
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 }
定义服务器接口
type TcpHandler ¶
type TcpHandler struct {
// contains filtered or unexported fields
}
路由接口, 这里面路由是 使用框架者给该链接自定的 处理业务方法 路由里的TcpMessage 则包含用该链接的链接信息和该链接的请求数据信息
func NewTcpHandler ¶
func NewTcpHandler(method HandlerMethod) *TcpHandler
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中,定义抽象层接口
Click to show internal directories.
Click to hide internal directories.