Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1...

21
Go 语游戏项应情况汇报 厦真有趣信息科技有限公司 达达

Transcript of Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1...

Page 1: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

Go语⾔言游戏项⺫⽬目应⽤用情况汇报

厦⻔门真有趣信息科技有限公司

达达

Page 2: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

项⺫⽬目介绍

• 2012年 - 2015年,仙侠道⺴⽹网⻚页版,使⽤用Go语⾔言替代神仙道时期的Erlang,开发流程和主要架构不变

• 2014年 - 2015年,仙侠道⼿手机版,在原有架构基础上拆分游戏逻辑服务器,分离互动功能

Page 3: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

游戏服务端的挑战

• 请求频繁

• 实时性要求⾼高(百毫秒的延迟便可被感知)

• 开发效率要求⾼高(每周⼀一更)

• 运维效率要求⾼高(最好是别运维。。。)

Page 4: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

我们做了哪些事情

• 通讯层:协议描述语⾔言以及代码⾃自动⽣生成

• 业务层:顺序结构以及接⼝口注册

• 数据层:映射MySQL的内存数据库以及代码⾃自动⽣生成

Page 5: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

通讯层

• 通讯协议描述⽂文档的格式选择

• XML、JSON

• Protobuf

• ⾃自定义语法

• 可视化编辑

Page 6: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

通讯协议描述⽂文档⽚片段

Page 7: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

通讯协议解包封包代码⽚片段

Page 8: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

业务层

• 从结构上屏蔽所有可能发⽣生的阻塞

• ⽂文件读写

• RPC调⽤用

• chan阻塞

• 尽可能提⾼高响应速度

• 数据离CPU越近越好

• 避免数据复制和⼤大集合遍历

• 通过注册接⼝口防⽌止循环引⽤用

Page 9: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

业务模块公共接⼝口声明

Page 10: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

业务模块接⼝口实现

Page 11: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

业务模块接⼝口调⽤用

Page 12: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

数据层

• 玩家数据库切⽚片,减⼩小查询时的集合

• ⽀支持内存事务

• 以事务为单位同步到数据库

• ⽀支持Redo、Undo以及数据挖掘的同步⽇日志

• GC优化

Page 13: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

内存数据库代码⽚片段

Page 14: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

内存数据库事务(⽰示意)

Page 15: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

内存数据库事务回滚

Page 16: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

事务⽇日志(⽰示意)

Page 17: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

使⽤用lua脚本对同步⽇日志进⾏行数据挖掘

Page 18: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

内存数据库的GC优化 - CGO

Page 19: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

内存数据库的GC优化 - 数据读取

Page 20: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

内存数据库的GC优化 - 数据存⼊入

Page 21: Go语游戏项应情况汇报 - docs.huihoo.comdocs.huihoo.com/go/gopherchina/2015/1-1 Go语言游戏项目应用... · Go 语游戏项应 ... Go语言游戏项目应用情况汇报.key

谢谢⼤大家