└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # union 2 | 有疑问欢迎加群:828958110 3 | ## 什么是union 4 | union是分布式的游戏服务器框架,自带认证服,逻辑服的部分实现,其中逻辑服采用Actor模型。 5 | ## 简单,简单,再简单 6 | 简单到1s起服 7 | 简单到美术可以运维 8 | 简单到逻辑就像填空题 9 | 简单到不需要配置go路径 10 | 简单到union虽然是分布式架构,但你连ip都不需要配置 11 | ## 编译前准备 12 | 这版的开发环境为windows 13 | 编译union前需要按照3个软件 14 | 1 go 15 | 2 python2.7 16 | 3 redis,union自带了,目录在tools/bin Redis-x64-3.2.100.msi,安装后注意设置Path路径 17 | ## 1s编译 18 | 运行build.bat会要求选择pb的版本,选择后即可编译出可执行文件,输入1可以直接运行可执行文件 19 | ## 1s运行 20 | 编译出exe后,运行run.bat,按照提示操作,如果没有启动redis,会自动运行redis-server 21 | 运行后,会要求选择服务器,请至少启动一个认证服和逻辑服,服务器会自动组网 22 | ## 1s测试 23 | 运行test.bat 会要求按照python的pb库,选择和服务器一样的版本就行 24 | 按照好后按照指令输入即可看到服务器返回值 25 | ## protobuf版本问题 26 | union支持protobuf2.5和protobuf3.6, 27 | 开发时选择一个好版本后,直接修改build.bat,以免后续出错 28 | 为什么要同时支持pb2.5和pb3.6呢,比如我们用unity开发了一个游戏,采用lua+protobuf2.5,现在又要移植为H5 29 | 由于go在pb2.5和pb3.6产生的代码上的差异,union为了统一选择了pb2.5的语法 30 | ## 依赖管理 31 | union直接把依赖下载到本地进行管理,dep目录里面有所有go依赖 32 | ## 一切基于PB 33 | 从数据模型开始union就基于PB,会用PB生成逻辑代码。 34 | ## 数据库 35 | 游戏需要sql吗? 36 | 在我做的商业游戏中,确实有用到sql的地方,但只有日志分析和gm后台使用,所以union采用redis作为主存 37 | redis存的数据是有pb格式和msgpack格式 38 | 其中pb格式用于存储大且不需要被redis lua解析的数据,比如战斗回放 39 | 默认情况redis内存存储的是msgpack格式的数据,可以被redis lua解析与操作 40 | ## 分布式下的一致性 41 | union保证数据一致性的方法是用redis lua作为存储过程,因为redis是单线程的 42 | ## 微服务 43 | union可以非常方便的实现微服务 44 | 不用配置etcd,不用写任何网络相关代码,union已经集成了服务发现,断线重连等 45 | 同时union会自动发现负载最低的服务器 46 | 没有grpc,union的微服务使用纯的tcp模式,同时会像grpc一样自动生成代码,不过生成的代码集成度更高,调用就像普通函数一样方便 47 | ## 整体目录 48 | union 49 | conf 配置 50 | doc 策划档配置 51 | deps 依赖项目 52 | log 日志,运行时产生 53 | src 源码路径 54 | frame 框架代码 55 | gmodel 全局model 56 | gcontrol 全局control 57 | proto pb产生的go代码 58 | idl 中间语言 59 | pb2 pb2代码 60 | pb3 pb3代码 61 | csv 引导代码,会根据csv内容自动生产go代码,比如错误码等 62 | server 服务器代码 63 | auth 认证服 64 | logic 逻辑服 65 | test 测试服 66 | tools 工具路径 67 | auto 自动产生代码的路径 68 | bin 可执行文件路径 69 | gencode 动态产生代码的代码 70 | redis redis目录 71 | test 测试目录 72 | build.py 生成服务器可执行文件 73 | redis.py 启动测试redis-server 74 | main.go 入口 75 | 76 | ## IDL 77 | IDL为union的中间语言,有pb和csv两种,union会根据idl生成一些代码 78 | ### PB规范 79 | 由于union需要pb生成一部分代码,所以对pb有所规范 80 | 所有的客服端交互消息在client.proto里面 81 | 客服端发送的消息以C2S结尾,服务器回复的消息以S2C结尾 82 | 服务器回复的消息必须包含error字段 83 | ### CSV规范 84 | 85 | ## 消息处理 86 | union的消息处理支持两种 87 | 88 | ## 安装python依赖,运行测试代码 89 | 下载protobuf-matstr https://github.com/google/protobuf 90 | 复制python目录和src目录到tools/bin目录 91 | 修改python目录下setup.py 在# Find the Protocol Compiler.这句下面添加protoc路径os.environ['PROTOC'] = "../protoc.exe" 92 | 93 | 94 | ## 配置文件 95 | 服务器配置采用yaml格式 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | --------------------------------------------------------------------------------