Web应用 活跃维护

gonet

bobohume/gonet

go分布式服务器,基于内存mmo

1611
Stars 标星
350
Forks 分支
67
Watchers 关注
6
Open Issues
Go
主要语言
MIT
开源协议
16.6 MB
仓库大小
11 个月前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:bobohume/gonet
git clone https://github.com/bobohume/gonet.git
git clone git@github.com:bobohume/gonet.git
README.md master

机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。

Go 服务器

gonet 游戏服务器架构。

框架优势

演员

每个Actor都是一个独立的计算实体,Actor之间不共享数据,各个Actor只能操作自己的数据,所有的交互全部通过传递消息的方式进行,可以有效避免共享数据带来的并发竞争问题。

虚拟演员

降低分布式开发的复杂性,Actor总是存在,即不用关心代码在那个进程上运行,比如gm可以运行任一模块org,rank,activity具体模块actor怎么运行参考下面的stub。

微服务

stub模型微服务,解决微服务每个模块是不同的二进制,导致部署麻烦,新加进程会很繁琐,stub更像是插件模式,启用不同模块调用不同的微服务,在rpc通信上也无需区别rpcorg或者rpcrank, 只需要一个rpcgm即可

玩家角色

每个玩家一个actor,解耦,模块耦合性弱,lease一致性保证分布式一致性问题

对象关系映射

区别gorm,方便开发,玩家存储类似文档,玩家内存改变了定时同步给db,可以为各种嵌套结构

高可用

无单点服务,raft一致性同步元数组(mailbox(id->ip+port),stub),stub保证virtual actor高可用模式。 出故障影响部分玩家,高可用在lease内不可用。

分布式

参考下图的stub高可用(hash一致性) 以及player的mailbox(lease一致性)

远程过程调用

rpc模块脱离传统的注册-回调模式,只需要继承actor即可,actor的成员就是消息处理

通用唯一识别码

采用snowflake + etcd动态分配机器码

时间轮

优势
5级时间轮性能更佳O(1)
对比timer
go的定时器是大小堆,对高精度10毫秒定时器会吃掉大部分cpu

分布式消息队列

微服务,微服务之间使用分布式消息队列

热修复(进阶版)

不需要数据分离,应用更广泛的textcode jmp

属性同步(进阶版)

基于内存对比的属性同步,不需要写orm,a.b=1自动存盘,自动同步

rpc(进阶版)

类似grpc,写好回调函数,无需定义proto结构,自动生成rpc代码,无需build 如回调函数是:func (p *PlayerMgr) PlayerOnUnRegister(head rpc.RpcHead, playerId int64) 自动生成代码,rpc发起就直接rpcgame.PlayerMgr.PlayerOnUnRegister(rpc.RpcHead{SendType: rpc.SEND_LOCAL}, p.PlayerId)

进阶版有偿提供联系群主

流程图

流程图替代一些配表,比如ai,目前在开发一个web段的流程图编辑器

邮箱

actor之间消息队列采用mpsc的mailbox 
优势
actor适合mpsc的模式,消息队列满足邮件思想
对比channel
1.channel弊端在队列满了,投递消息会阻塞,假如actor处理过慢,大家都等着,谁也别想跑

2.性能在多生产者消费者急剧下降(内部是锁)
基准测试
i7 10700 2.9GHZ 16核 执行10万次生产和消费         
channel         
BenchmarkChanPushPop/100000_1-16             252           4715405 ns/op
BenchmarkChanPushPop/100000_2-16             174           6881893 ns/op
BenchmarkChanPushPop/100000_4-16             180           6635532 ns/op
BenchmarkChanPushPop/100000_8-16             142           8440178 ns/op
BenchmarkChanPushPop/100000_16-16            129           9312717 ns/op            
mailbox             
BenchmarkPushPopActor/100000_1-16            252           4748732 ns/op
BenchmarkPushPopActor/100000_2-16            205           5818782 ns/op
BenchmarkPushPopActor/100000_4-16            278           4348560 ns/op
BenchmarkPushPopActor/100000_8-16            297           3986121 ns/op
BenchmarkPushPopActor/100000_16-16           304           3839012 ns/op

WIKI

交流

QQ群:950288306 QQ群2:991398832

服务器架构如下:

早安存根

本站来源与版权声明
  • 本文标题:gonet - go分布式服务器
  • 本文链接:https://cn121.com/webapp/bobohume-gonet.html
  • 原项目:bobohume/gonet 版权归原作者 bobohume 及贡献者所有
  • 收录信息:本站于 2026-10-05 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
  • 开源协议:收录时本项目采用 MIT(查看 LICENSE 原文),本站译文为其衍生内容;使用、修改、分发请以该仓库 LICENSE 原文为准。
  • 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 bobohume/gonet。
  • 翻译说明:本页正文为人工智能生成内容——由机器翻译对原项目 README 初译、经程序校验排版,可能存在错漏,请以原项目文档为准。
  • 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
  • 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。