cluster

package
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: Oct 29, 2021 License: Apache-2.0 Imports: 2 Imported by: 0

Documentation

Overview

Package cluster 提供服务器集群通信上层接口给业务层使用

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RegisterSerializer

func RegisterSerializer(serializer Serializer, unSerializer UnSerializer)

RegisterSerializer 业务层自定义其消息通信协议,注册网络数据序列化/反序列化函数,该函数必须保证并发安全 所有网络数据都会通过此注册函数进行打包解包

func SetGateRouteService

func SetGateRouteService(balance []bigfish.SvcID)

SetGateRouteService 设置网关消息路由服务 默认针对所有网关有效,当客户端无指定路由时,则路由到此服务。轮询路由,动态平衡

func SetGateScheduler

func SetGateScheduler(scheduler GateScheduler)

SetGateScheduler 集群节点收到逻辑服指令后,转给网关进行处理

func SetInstance

func SetInstance(inst IManager)

SetInstance 显示初始化框架实例对象。业务层不得调用此API

func SetMonitor

func SetMonitor(svc bigfish.SvcID)

SetMonitor 设置服务监听 只能设置唯一一个常驻监听服务

Types

type Callback

type Callback func(self bigfish.Service, msgID uint32, reqMsg interface{}, respMsg interface{})

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 MsgType

type MsgType int

MsgType 消息类型

const (
	Notify   MsgType = iota // 通知类消息,对应 Node.Send
	Request                 // 请求类消息,对应 Node.Request
	Response                // 回应类消息,对应 Node.Request 的 Callback
)

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 Dial

func Dial(srvID uint16, name string, address string, reconnectTimeout time.Duration) Node

Dial 连接目标服务器,失败返回nil 参数:reconnectTimeout 断线重连超时。连接断开后,网络层会进行断线重连!

func Find

func Find(srvID uint16) (Node, bool)

Find 获取节点 注意:数据为nil和接口为nil是两种类型,使用时判断返回true/false确定是否可以使用网络节点

func RoundRobin

func RoundRobin(name string) (Node, bool)

RoundRobin 轮询指定类型节点(负载均衡) 注意:数据为nil和接口为nil是两种类型,使用时判断返回true/false确定是否可以使用网络节点

type Serializer

type Serializer func(msgData interface{}) ([]byte, error)

Serializer 网络数据序列化函数,该函数必须保证并发安全 业务层自定义其消息通信协议

type ServiceProxy

type ServiceProxy interface {
	// OnClusterNodeMessage 收到集群网络消息
	// 参数:node 服务器网络节点
	// 返回值:请求类消息需回应,否则返回 nil
	OnClusterNodeMessage(node Node, msgID uint32, msgData interface{}) (respData interface{})
}

ServiceProxy 网络服务代理接口 当某个普通服务(framework.Service)需要使用集群网络通信时,则需实现此接口

type UnSerializer

type UnSerializer func(mt MsgType, msgID uint32, packet []byte) (msgData interface{}, err error)

UnSerializer 网络数据反序列化函数,该函数必须保证并发安全 业务层自定义其消息通信协议

Jump to

Keyboard shortcuts

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