Documentation
¶
Overview ¶
Package cluster 提供服务器集群通信上层接口给业务层使用
Index ¶
- func RegisterSerializer(serializer Serializer, unSerializer UnSerializer)
- func SetGateRouteService(balance []bigfish.SvcID)
- func SetGateScheduler(scheduler GateScheduler)
- func SetInstance(inst IManager)
- func SetMonitor(svc bigfish.SvcID)
- type Callback
- type GateNode
- type GateProxy
- type GateScheduler
- type GateTransmitter
- type IManager
- type Monitor
- type MsgType
- type Node
- type Serializer
- type ServiceProxy
- type UnSerializer
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func RegisterSerializer ¶
func RegisterSerializer(serializer Serializer, unSerializer UnSerializer)
RegisterSerializer 业务层自定义其消息通信协议,注册网络数据序列化/反序列化函数,该函数必须保证并发安全 所有网络数据都会通过此注册函数进行打包解包
func SetGateRouteService ¶
SetGateRouteService 设置网关消息路由服务 默认针对所有网关有效,当客户端无指定路由时,则路由到此服务。轮询路由,动态平衡
func SetGateScheduler ¶
func SetGateScheduler(scheduler GateScheduler)
SetGateScheduler 集群节点收到逻辑服指令后,转给网关进行处理
Types ¶
type Callback ¶
Callback 网络服务请求回调 参数 self 为请求者服务对象, reqMsg 为请求的 msgData
respMsg 为回应消息,业务层自己反序列化网络字节流数据
异步操作,注意上下文数据变更,不要使用 UpValue 、闭包等
type GateNode ¶
type GateNode interface {
Node
GateScheduler
// SetRouteService 设置客户端目标路由服务
// 网关会将此客户端的消息路由到该(GateProxy)服务中
SetRouteService(fd uint32, svc bigfish.SvcID)
}
GateNode 网关服务器节点 逻辑服使用网关节点向网关服务器发消息和客户端进行交互
type GateProxy ¶
type GateProxy interface {
// OnGateClientConnect 客户端通过网关首次访问服务器
// 参数:fd 为客户端在此网关进程中的唯一标识(注意:fd 只在其网关进程中唯一,在所有进程中不唯一)
OnGateClientConnect(gate GateNode, fd uint32, address string, packet []byte)
// OnGateClientMessage 客户端通过网关向服务器发送数据
OnGateClientMessage(gate GateNode, fd uint32, packet []byte)
// OnGateClientDisconnect 客户端网络连接断开
OnGateClientDisconnect(gate GateNode, fd uint32, cause string)
}
GateProxy 网关服务代理接口 当某个普通服务(framework.Service)需要接收来自客户端的网络消息,则需实现此接口 网关节点会将客户端消息路由给此服务
type GateScheduler ¶
type GateScheduler interface {
// SendClient 给客户端发送数据
SendClient(fd uint32, packet []byte)
// SendClients 给多个客户端发送数据
SendClients(fds []uint32, packet []byte)
// Broadcast 广播所有客户端
Broadcast(packet []byte)
// KickClient 断开客户端连接
KickClient(fd uint32)
// KickClients 断开多个客户端连接
KickClients(fds []uint32)
// KickAll 将数据包发送给客户端后,断开所有客户端连接
// 参数:packet 为nil则不发数据直接断开客户端连接
KickAll(packet []byte)
}
GateScheduler 网关调度接口 逻辑服和客户端的通信协议自定义,网关只负责转发 逻辑服自己处理消息的序列化和反序列化
type GateTransmitter ¶
type GateTransmitter interface {
Node
// PackClientConnectAndWrite 网关通知目标服务器客户端连接成功,首包
// 参数:buffer 为数据打包缓冲区,指定缓冲区可省去内存开辟,减少内存碎片
PackClientConnectAndWrite(buffer []byte, fd uint32, address string, packet []byte)
// PackClientMessageAndWrite 网关将解密后的客户端消息转发给目标服
PackClientMessageAndWrite(buffer []byte, fd uint32, packet []byte) error
// PackClientDisconnectAndWrite 网关通知目标服务器客户端连接断开
PackClientDisconnectAndWrite(buffer []byte, fd uint32, cause string)
}
GateTransmitter 网关转发客户端消息到逻辑服
type IManager ¶
type IManager interface {
// Dial 连接目标服务器,失败返回nil
// 参数:reconnectTimeout 断线重连超时。连接断开后,网络层会进行断线重连!
Dial(srvID uint16, name string, address string, reconnectTimeout time.Duration) Node
// Find 获取节点,失败返回 false
// 注意:数据为nil和接口为nil是两种类型,使用时判断返回true/false确定是否可以使用网络节点
Find(srvID uint16) (Node, bool)
// RoundRobin 轮询指定类型节点(负载均衡),失败返回 false
// 注意:数据为nil和接口为nil是两种类型,使用时判断返回true/false确定是否可以使用网络节点
RoundRobin(name string) (Node, bool)
// RegisterSerializer 业务层自定义其消息通信协议,注册网络数据序列化/反序列化函数,该函数必须保证并发安全
// 所有网络数据都会通过此注册函数进行打包解包
RegisterSerializer(serializer Serializer, unSerializer UnSerializer)
// SetGateScheduler 集群节点收到逻辑服指令后,转给网关进行处理
SetGateScheduler(scheduler GateScheduler)
// SetGateRouteService 设置网关消息路由服务
// 默认针对所有网关有效,当客户端无指定路由时,则路由到此服务
SetGateRouteService(balance []bigfish.SvcID)
// SetMonitor 设置服务监听
// 只能设置唯一一个常驻监听服务
SetMonitor(svc bigfish.SvcID)
}
IManager 集群管理对象接口
type Monitor ¶
type Monitor interface {
// OnClusterNodeConnect 服务器节点连接成功
OnClusterNodeConnect(node Node)
// OnClusterNodeDisconnect 服务器节点连接断开
OnClusterNodeDisconnect(node Node)
}
Monitor 服务监听接口 当某个普通服务(framework.Service)需要监听集群网络时,则需实现此接口
type Node ¶
type Node interface {
// ID 服务器ID
ID() uint16
// Name 服务器名
Name() string
// IPAddr 网络地址
IPAddr() string
// String 字符串输出
String() string
// Send 发送消息
// 参数:dstSvc 目标服务名
Send(dstSvc string, msgID uint32, msgData interface{})
// SendByID 发送消息
// 参数:dstSvc 目标服务ID
SendByID(dstSvc bigfish.SvcID, msgID uint32, msgData interface{})
// Request 请求消息,需对方回应
// 参数:selfSvc 自己的服务ID;dstSvc 目标服务名
// callback 为异步调用,参数 reqMsg 为请求的 msgData。注意上下文数据变更,不要使用 UpValue 、闭包等。
Request(selfSvc bigfish.SvcID, dstSvc string, msgID uint32, msgData interface{}, callback Callback)
// RequestByID 请求消息,需对方回应
// 参数:selfSvc 自己的服务ID;dstSvc 目标服务ID
// callback 为异步调用,参数 reqMsg 为请求的 msgData。注意上下文数据变更,不要使用 UpValue 、闭包等。
RequestByID(selfSvc bigfish.SvcID, dstSvc bigfish.SvcID, msgID uint32, msgData interface{}, callback Callback)
// Close 关闭节点
Close()
}
Node 服务器网络节点 最大支持 65535 个节点
func RoundRobin ¶
RoundRobin 轮询指定类型节点(负载均衡) 注意:数据为nil和接口为nil是两种类型,使用时判断返回true/false确定是否可以使用网络节点
type Serializer ¶
Serializer 网络数据序列化函数,该函数必须保证并发安全 业务层自定义其消息通信协议
type ServiceProxy ¶
type ServiceProxy interface {
// OnClusterNodeMessage 收到集群网络消息
// 参数:node 服务器网络节点
// 返回值:请求类消息需回应,否则返回 nil
OnClusterNodeMessage(node Node, msgID uint32, msgData interface{}) (respData interface{})
}
ServiceProxy 网络服务代理接口 当某个普通服务(framework.Service)需要使用集群网络通信时,则需实现此接口