Documentation ¶
Overview ¶
提供了服务注册发现、服务互联互通、线路负载均衡、业务逻辑承载等功能.
Index ¶
- Constants
- Variables
- func BackupLan() int
- func ClearInterval(id int, tid ...int64)
- func ClearTimeout(id int, tid ...int64)
- func CloseLan()
- func MonitorLan()
- func NotifyCgi(id int, creq *xproto.CgiReq, cresp *xproto.CgiResp) bool
- func NotifyEvt(id int, param interface{}) bool
- func NotifyMsg(id int, mreq *xproto.MsgReq) bool
- func NotifyRpc(id int, rreq *xproto.RpcReq, rresp *xproto.RpcResp) bool
- func PauseLan()
- func PostKV(key string, value string, version string, block ...bool) bool
- func PullKV(key string) []byte
- func RecvLan()
- func RegCgi(id int, fun func(creq *xproto.CgiReq, cresp *xproto.CgiResp)) int
- func RegCgiRoute(_map map[int]*CgiRoute)
- func RegEvt(id int, fun func(param interface{})) int
- func RegMsg(id int, fun func(*xproto.MsgReq)) int
- func RegMsgRoute(_map map[int]*MsgRoute)
- func RegRpc(id int, fun func(rreq *xproto.RpcReq, rresp *xproto.RpcResp)) int
- func RegRpcRoute(_map map[int]*RpcRoute)
- func RestoreLan()
- func ResumeLan()
- func RunIn(tid int64, fun func(), tag ...string) chan bool
- func RunInMain(fun func(), tag ...string) chan bool
- func SendAsync(id int, uid int, req proto.Message, addr string, ...)
- func SendCgi(id int, uid int, req *http.Request, addr string, timeout ...int) (cresp *xproto.CgiResp, err error)
- func SendFrame(frame xproto.IFrame) bool
- func SendMsg(id int, msg proto.Message, mreq *xproto.MsgReq) bool
- func SendSync(id int, uid int, req proto.Message, resp proto.Message, addr string, ...) error
- func Start(server IServer)
- func StartLan(lanCfg *LanCfg, handleMsg func(*xproto.MsgReq), ...)
- func Stop()
- func SubKV(key string, interval int, onUpdate func(data []byte))
- func UnregCgi(id int, hid int) bool
- func UnregEvt(id int, hid int) bool
- func UnregMsg(id int, hid int) bool
- func UnregRpc(id int, hid int) bool
- func WatchSignal() <-chan string
- type CgiFunc
- type CgiRoute
- type CslCfg
- type EvtFunc
- type IServer
- type LanCfg
- type LanClt
- type LanSvr
- type MsgFunc
- type MsgRoute
- type Proc
- type Route
- type RpcFunc
- type RpcRoute
- type Server
- func (this *Server) CTOR(CHILD interface{})
- func (this *Server) Destroy()
- func (this *Server) GetCfg() *SvrCfg
- func (this *Server) GetEnv() string
- func (this *Server) GetFPS() int
- func (this *Server) GetTitle() string
- func (_this *Server) Init(cfg *SvrCfg) bool
- func (this *Server) Name() string
- func (_this *Server) PreQuit()
- func (this *Server) RecvCgi(rreq *xproto.CgiReq, rresp *xproto.CgiResp)
- func (this *Server) RecvMsg(mreq *xproto.MsgReq)
- func (this *Server) RecvRpc(rreq *xproto.RpcReq, rresp *xproto.RpcResp)
- func (this *Server) SetTitle() string
- func (this *Server) Start()
- func (this *Server) Update(delta float32)
- type SvrCfg
- type TimerEntity
- type TimerRecord
- type Wrap
Constants ¶
View Source
const ( LAN_CTRL_ROOT = "/" // 运维帮助 LAN_CTRL_STATUS = "/status" // 线路状态 LAN_CTRL_HEALTH = "/health" // 线路检测 LAN_CTRL_BACKUP = "/backup" // 线路备份 LAN_CTRL_RESUME = "/resume" // 线路恢复 LAN_CTRL_PAUSE = "/pause" // 线路暂停 LAN_CTRL_CLOSE = "/close" // 线路关闭 LAN_CTRL_DUMP = "/dump" // 清空内存 LAN_CTRL_PRINT = "/print" // 内存打印 LAN_CTRL_CONSOLE = "/console" // 线路日志 LAN_CTRL_FLUSHLOG = "/flushlog" // 清空日志 )
View Source
const ( LAN_CIN_MAX_FRAME = 50000 // 最大输入网络帧数 LAN_COUT_MAX_FRAME = 50000 // 最大输出网络帧数 )
View Source
const ( EVT_SERVER_STARTED = -1 // 服务就绪(配置就绪 & 日志就绪 & DB就绪 & Redis就绪 & Lan就绪) EVT_SERVER_CHANGED = -2 // 服务变更(参数类型:[]interface{}{added map[string][]string, removed map[string][]string}) EVT_SERVER_PREQUIT = -3 // 服务即将退出 )
View Source
const ( ENV_DEV = "dev" // 开发 ENV_TEST = "test" // 内测 ENV_BETA = "beta" // 公测 ENV_LIVE = "live" // 线上 )
View Source
const (
SERVER_SLEEP time.Duration = 10 * time.Millisecond // 帧刷新间隔
)
View Source
const (
UPDATE_SLEEP time.Duration = 10 * time.Millisecond // 帧刷新间隔
)
Variables ¶
View Source
var ( GMsg = xevt.NewEvtMgr(true) // Msg消息中心 GRpc = xevt.NewEvtMgr(false) // Rpc消息中心 GCgi = xevt.NewEvtMgr(false) // Cgi消息中心 GEvt = xevt.NewEvtMgr(true) // Evt消息中心 )
View Source
var ( ERR_SEND_CHAN_FULL = errors.New("send chan is full") ERR_NO_ROUTE_FOUND = errors.New("no route found") ERR_RPC_TIMEOUT = errors.New("rpc call timeout") ERR_CGI_TIMEOUT = errors.New("cgi call timeout") ERR_RPC_INTERRUPTED = errors.New("rpc call has been interrupted, see log context for more details.") ERR_CGI_INTERRUPTED = errors.New("cgi call has been interrupted, see log context for more details.") )
View Source
var ( GWrap *Wrap // 服务封装器 GServer IServer // 全局服务 )
View Source
var CGIROUTEMAP map[int]*CgiRoute // cgi路由
View Source
var (
CslClt *consulapi.Client // Consul连接
)
View Source
var MSGROUTEMAP map[int]*MsgRoute // msg路由
View Source
var (
MainTID int64 = -1 // 主线程ID
)
View Source
var RPCROUTEMAP map[int]*RpcRoute // rpc路由
Functions ¶
func SendAsync ¶
func SendAsync(id int, uid int, req proto.Message, addr string, callback func(frame *xproto.RpcResp, err error), offsetAndTimeout ...int)
发送Rpc消息(异步)
id: 消息ID uid: 用户ID(负载均衡) req: 请求结构体 addr: 目标服务器 callback: 回调函数 offset: 目标协程ID偏移(基于protocol中定义) timeout: 超时时长
func SendCgi ¶
func SendCgi(id int, uid int, req *http.Request, addr string, timeout ...int) (cresp *xproto.CgiResp, err error)
发送Cgi消息(同步,否则ResponseWriter无法输出)
id: 消息ID uid: 用户ID(负载均衡) req: 请求结构体 addr: 目标服务器 timeout: 超时时长
func SendSync ¶
func SendSync(id int, uid int, req proto.Message, resp proto.Message, addr string, offsetAndTimeout ...int) error
发送Rpc消息(同步)
id: 消息ID uid: 用户ID(负载均衡) req: 请求结构体 resp: 返回结构体 addr: 目标服务器 offset: 目标协程偏移(基于protocol中定义) timeout: 超时时长
func StartLan ¶
func StartLan(lanCfg *LanCfg, handleMsg func(*xproto.MsgReq), handleRpc func(*xproto.RpcReq, *xproto.RpcResp), handleCgi func(*xproto.CgiReq, *xproto.CgiResp))
启动线路
lancfg: 线路配置 handleMsg: 消息处理函数
func WatchSignal ¶
func WatchSignal() <-chan string
Types ¶
type CslCfg ¶
type CslCfg struct { Ns string `json:"ns"` // 命名空间(必要) Addr string `json:"addr"` // 注册地址(必要) Logout int `json:"logout" default:"60"` // 超时注销(可选,默认:60,开发阶段应设置较大值避免注销) Timeout int `json:"timeout" default:"5"` // 检测超时(可选,默认:5,开发阶段应设置较大值避免注销) Interval int `json:"interval" default:"5"` // 检测间隔(可选,默认:5,开发阶段应设置较大值避免注销) Fetch int `json:"fetch" default:"5"` // 拉取间隔(可选,默认:5) }
中心配置
type IServer ¶
type IServer interface { Init(cfg *SvrCfg) bool // 初始化 Start() // 服务启动 Update(delta float32) // 服务循环 Destroy() // 服务结束 PreQuit() // 服务即将退出 Name() string // 服务名称 GetEnv() string // 服务环境 GetCfg() *SvrCfg // 获取配置 GetFPS() int // 获取帧率 SetTitle() string // 更新标题 GetTitle() string // 获取标题 RecvMsg(mreq *xproto.MsgReq) // 接收Msg消息 RecvRpc(rreq *xproto.RpcReq, rresp *xproto.RpcResp) // 接收Rpc消息 RecvCgi(creq *xproto.CgiReq, cresp *xproto.CgiResp) // 接收Cgi消息 }
服务接口
type LanCfg ¶
type LanCfg struct { Name string `json:"name"` // 线路名称(必要) Addr string `json:"addr"` // 线路地址(可选:固定地址/动态分配,开发阶段应固定端口) Ctrl string `json:"ctrl"` // 运维地址(可选:固定地址/动态分配) GO int `json:"go" default:"1"` // 逻辑线程数(可选,默认:1) MaxRx int `json:"maxrx" default:"4096"` // 最大接收字节数(可选,单位:KB,默认:4096) Msg string `json:"msg" default:"pb"` // msg消息协议类型(可选:pb/json,默认:pb) Cgi string `json:"cgi" default:"json"` // cgi消息协议类型(可选:pb/json,默认:json) Link []string `json:"link"` // 关联线路(可选) }
线路配置
type LanSvr ¶
type LanSvr struct { *LanCfg mangos.Socket Clients sync.Map // 连接池(map[string][]*LanClt) ClientID sync.Map // 连接映射(map[string]*LanClt) SClosed bool // 是否关闭 }
线路服务
type Proc ¶
type Proc struct { TID int64 // 线路的GoID Num int // 线路线程总数 CIN chan xproto.IFrame // 输入队列 COUT chan xproto.IFrame // 输出队列 Loop bool // 循环标识 Pause bool // 暂停标识 Resp sync.Map // map[int64]chan *xproto.RpcReq/*xproto.CgiFrame }
业务处理器
type Route ¶
type Route struct { ID int // 路由ID Name string // 路由名称 GoL int // 协程ID(左) GoR int //协程ID(右) RW bool // 可读可写(默认true) Log int // 日志层级(参考xlog的LogLevel) Dst []string // 目标 }
路由信息
type Server ¶
type Server struct { xobj.OBJECT REAL IServer Cfg *SvrCfg // 配置信息 FPS int // 应用帧率 Title string // 应用标题 }
服务对象
type SvrCfg ¶
type SvrCfg struct { Raw []byte `json:"-"` // 原始数据 Env string `json:"env"` // 环境标识(必要:dev[开发]/test[内测]/beta[公测]/live[线上]) Csl *CslCfg `json:"csl"` // 中心配置(必要) Lan *LanCfg `json:"lan"` // 线路配置(必要) Log map[string]*xlog.LogCfg `json:"log"` // 日志配置(必要) Redis *xorm.RedisCfg `json:"redis,omitempty"` // Redis配置(可选) Mysql map[string]*xorm.MysqlCfg `json:"mysql,omitempty"` // Mysql配置(可选) }
服务配置
var (
GCfg *SvrCfg // 全局配置
)
type TimerEntity ¶
type TimerEntity struct { ID int // 定时器ID Func func() // 定时器回调 Time int // 定时时间 RawTime int // 初始时间 Repeat bool // 循环调用 Crash bool // 是否崩溃 RW bool // 是否读写 Tag interface{} // 日志标签 Log int // 日志层级 }
定时器对象
func SetInterval ¶
func SetInterval(fun func(), interval float32, tid ...int64) *TimerEntity
设置间歇调用(务必在逻辑线程中调用或指定线程ID)
fun: 回调函数 interval: 间歇时间(秒) tid: 线程ID
func SetTimeout ¶
func SetTimeout(fun func(), timeout float32, tid ...int64) *TimerEntity
设置超时调用(务必在逻辑线程中调用或指定线程ID)
fun: 回调函数 timeout: 超时时间(秒) tid: 线程ID
type TimerRecord ¶
定时器句柄
Click to show internal directories.
Click to hide internal directories.