gservices

package
v0.0.0-...-ee7ecfe Latest Latest
Warning

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

Go to latest
Published: Apr 16, 2019 License: Apache-2.0 Imports: 8 Imported by: 0

README

gservices包介绍

gservices包是以erlang:gen_server/gen_timer....为目标所做的封装。
genserver:通用的请求-应答式服务器模型。
gentimer:通用的定时器服务器模型。(弃用,请使用/timertask)
不足与缺陷:
1 相对于erlang:gen_server/gen_timer功能略有不足,会持续优化。
2 暂时未实现link,restart,name等特性。
3 纯内存,没有持久化。

Documentation

Overview

封装了本地genserver,支持异步同步调用

Index

Constants

定时器初始值

Variables

This section is empty.

Functions

This section is empty.

Types

type Iack

type Iack interface {
	Ack(data []interface{})
}

type Ijob

type Ijob interface {
	Notify() <-chan Job // 获取一个chan:当job被执行时,可以从chan中获取消息
	GetCount() uint64   // 获取已经执行的次数
	GetTimes() uint64   // 获取允许执行的最大次数
}

type InputMessage

type InputMessage struct {
	Msg        interface{}         // 消息标识(暂时不预留内部消息)
	F          interface{}         // 消息handler
	CB         Iack                // 消息回调
	Args       []interface{}       // 函数调用参数
	OutputChan chan *OutputMessage // 接收返回值的队列(长度为1)
}

type Job

type Job struct {
	Id           uint64          // 唯一id,由timerserver生成,用来区分同一时刻的不同事件
	Times        uint64          // 允许执行的最大次数:0表示无数次
	Count        uint64          // 表示已执行的次数
	IntervalTime time.Duration   // 间隔时间:支持ns
	CreateTime   time.Time       // 创建时间
	ActionTime   time.Time       // FIXME 计算得出的本次执行时间点,会有误差
	JobHandler   MessageHandler1 // 事件函数
	Args         []interface{}   // 函数调用参数
	MsgChan      chan Job        // 消息通道,执行时,控制器通过该通道向外部传递消息
}

func (*Job) ExecWithGo

func (job *Job) ExecWithGo(isGo bool)

func (Job) GetCount

func (job Job) GetCount() uint64

func (Job) GetTimes

func (job Job) GetTimes() uint64

func (Job) Less

func (job Job) Less(another rbtree.Item) bool

func (Job) Notify

func (job Job) Notify() <-chan Job

type LocalClient

type LocalClient struct {
	Server *LocalServer // rpcserver

}

func (*LocalClient) Call

func (client *LocalClient) Call(input *InputMessage, timeout int) (*OutputMessage, error)

同步请求rpcserver input:请求参数 timeout:超时时间(秒) FIXME 调用前需要先注册

func (*LocalClient) Cast

func (client *LocalClient) Cast(input *InputMessage)

异步请求rpcserver FIXME 调用前需要先注册

type LocalServer

type LocalServer struct {
	Functions      map[interface{}]interface{} // map[msg]msg_handler主要用于检查
	MessageBoxChan chan *InputMessage          // 消息队列
	Pending        int                         // 用于记录当前排队的消息数量
	// contains filtered or unexported fields
}

func NewLocalServer

func NewLocalServer(length int) *LocalServer

func (*LocalServer) Check

func (server *LocalServer) Check(input *InputMessage) bool

func (*LocalServer) CloseByForce

func (server *LocalServer) CloseByForce()

强制关闭server 不再处理剩余的所有消息

func (*LocalServer) CloseByGrace

func (server *LocalServer) CloseByGrace()

优雅的关闭server 会处理完之前剩余的消息

func (*LocalServer) Exec

func (server *LocalServer) Exec(input *InputMessage)

func (*LocalServer) NewLocalClient

func (server *LocalServer) NewLocalClient() *LocalClient

func (*LocalServer) Register

func (server *LocalServer) Register(msg interface{}, msgHandler interface{}) error

先注册再使用

type LocalTimerServer

type LocalTimerServer struct {
	Id         uint64         // 自增的序列号
	JobList    *rbtree.Rbtree // 基于内存的事件容器
	Count      uint64         // 统计已执行的任务次数
	PauseChan  chan struct{}  // 暂停
	ResumeChan chan struct{}  // 重置
	ExitChan   chan struct{}  // 退出
}

func NewLocalTimerServer

func NewLocalTimerServer() *LocalTimerServer

func (*LocalTimerServer) AddJobRepeat

func (server *LocalTimerServer) AddJobRepeat(jobInterval time.Duration, times uint64, jobFunc MessageHandler1, args []interface{}) (Ijob, bool)

添加重复任务

func (*LocalTimerServer) AddJobWithDeadtime

func (server *LocalTimerServer) AddJobWithDeadtime(deadtime time.Time, jobFunc MessageHandler1, args []interface{}) (Ijob, bool)

添加单次任务,适用于特定时期的活动等类型的任务

func (*LocalTimerServer) AddJobWithInterval

func (server *LocalTimerServer) AddJobWithInterval(timeout time.Duration, jobFunc MessageHandler1, args []interface{}) (Ijob, bool)

添加单次任务,适用于单次定时业务逻辑

func (*LocalTimerServer) DelJob

func (server *LocalTimerServer) DelJob(job Ijob) bool

移除指定的单项任务

func (*LocalTimerServer) DelJobs

func (server *LocalTimerServer) DelJobs(jobs []Ijob)

移除指定的多项任务

func (*LocalTimerServer) GetCount

func (server *LocalTimerServer) GetCount() uint64

获取server当前执行次数

func (*LocalTimerServer) Reset

func (server *LocalTimerServer) Reset() *LocalTimerServer

重置server的内部状态

func (*LocalTimerServer) StopByForce

func (server *LocalTimerServer) StopByForce()

强制关闭

func (*LocalTimerServer) StopByGrace

func (server *LocalTimerServer) StopByGrace()

优雅的关闭 会依次执行一次(不按照actiontime)

func (*LocalTimerServer) UpdateJobTimeout

func (server *LocalTimerServer) UpdateJobTimeout(job Ijob, timeout time.Duration) bool

重设指定任务的超时时间

func (*LocalTimerServer) WaitJobs

func (server *LocalTimerServer) WaitJobs() uint

获取pending的任务数量

type MessageHandler1

type MessageHandler1 func([]interface{})

type MessageHandler2

type MessageHandler2 func([]interface{}) interface{}

type MessageHandler3

type MessageHandler3 func([]interface{}) []interface{}

type MessageHandlerRet1

type MessageHandlerRet1 []interface{}

type MessageHandlerRet2

type MessageHandlerRet2 interface{}

type OutputMessage

type OutputMessage struct {
	Err error
	Ret []interface{}
}

Jump to

Keyboard shortcuts

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