repositorypackage
0.0.0-20221210071339-6d7f5147a063
Repository: https://github.com/lsg2020/go-actor.git
Documentation: pkg.go.dev
# Packages
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# README
go-actor
- go-actor is a lightweight message framework using actor model
初衷
- 想能在代码逻辑上方便的写无锁的同步rpc调用代码,同时又不会阻塞住其他服务对这个Actor的调用
- 一个Actor可以有多种身份,想能比较方便的分类管理Actor,分类通过Actor地址调用目标Actor
- 节点间使用多种传输方式,比如游戏玩家移动这种同步可以使用tcp实现快速通知消息丢失也不太紧要,平台奖励类的可以使用mq通知
快速开始
创建ActorSystem
ActorSystem用来分类管理Actor,调用某个Actor的时候需要基于他所在的同名ActorSystemgoactor.WithName
: 指定ActorSystem名字,同类同名goactor.WithInstanceId
: 指定节点id,同类型下唯一goactor.WithEtcd
: etcd注册地址,同类型使用同组etcdgoactor.WithTransport
: 关联传输器
system, err := goactor.NewActorSystem(
goactor.WithName("hello"),
goactor.WithInstanceId(1),
goactor.WithEtcd("http://127.0.0.1:2379"),
goactor.WithTransport(trans),
)
创建执行器
SingleGoroutine
: 单协程执行器,每个执行器同时只有一个协程在执行逻辑代码,当执行到Executer.Wait
时会让出执行权给同执行器的其他协程处理消息,自己挂起直到Executer.OnResponse
对应的session唤醒并等待其他协程让出执行权
single := &executer.SingleGoroutine{}
single.Start(context.Background(), 1)
创建协议
protobuf
- go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
- go install github.com/lsg2020/go-actor/tools/protoc-gen-gactor
- 定义协议文件例如
- 生成
protoc -I . --go_out=. --gactor_out=. *.proto
proto := protocols.NewProtobuf(1)
hello.RegisterHelloService(&HelloService{}, proto)
创建Actor
并指定个名字注册到ActorSystem
func (hello *HelloActor) OnInit(a goactor.Actor) {
hello.actor = a
hello.addr = system.Register(a, "hello")
}
goactor.NewActor(&HelloActor{}, single, goactor.ActorWithProto(proto))
TODO
- context取消的传递
- prometheus指标增加
- transport 支持多个system