模型工具
- 开发语言golang,兼顾开发效率与性能
- 与前端通讯方式为http、websocket 使用web框架
github.com/gin-gonic/gin
websocket框架
github.com/gorilla/websocket
-
服务器内服务间通讯使用rpc-json
-
使用关系数据库mysql和nosql redis,以及go程序的本地内存 使用golang的orm框架
// gorm v1.0
github.com/jinzhu/gorm
redis包,使用redis作为一级缓存实时缓存和预缓存、时效性数据存储、分布式锁
// redis单例包
github.com/gomodule/redigo
// redis集群包
github.com/mna/redisc
高性能内存缓存,对redis的部分数据做本次缓存的二级缓存,减少部分长期无修改数据的redis访问和mysql访问
github.com/dgraph-io/ristretto
- 工具包 包含许多方便的常用工具函数
github.com/unknwon/com
项目框架
├─config 配置文件,不含代码
├─document 开发文档,不含代码
├─cmd 所有程序入口
│ ├─build_tools 编译工具、部署工具
│ ├─chatclient 聊天测试客户端
│ ├─chatserver 聊天服务器入口
│ ├─group 组队服务器入口
│ ├─poke 游戏主程序入口
│ ├─scheduled 定时任务程序
│ └─test 测试程序入口
│ ├─channeltest
│ ├─tese1
│ └─test2
├─common 公共包
│ ├─config 读取配置
│ ├─logger 日志
│ ├─model 服务间交互模型
│ ├─persistence 持久化,包括mysql实例与redis实例
│ ├─rcache 数据缓存,对redis
│ ├─rpc-client rpc访问层
│ │ └─rpc-group 对于group包的rpc访问层
│ └─utils 工具包
│ └─path
├─control 服务监控
├─game 主程序包
│ ├─app 程序实例
│ ├─common 主程序-公共包
│ ├─controllers 控制层,http路由响应
│ │ └─npc
│ ├─ginapp 对gin.Context的封装
│ ├─middleware 路由中间件,实现登录验证、跨域验证、单ip限制、静态文件服务器(开发用)
│ ├─models 游戏对象模型
│ ├─relations 初始化数据
│ ├─repositories 数据访问层,封装对常用数据的访问
│ ├─routers http路由定义
│ ├─services 服务层
│ │ ├─common
│ │ ├─datastore
│ │ ├─group-helper
│ │ └─task-helper
│ └─utils 主程序-工具包
│ └─captcha 验证码包
├─chatserver 聊天服务器包
├─group 组队服务器
│ └─rdc-server 组队服务器rpc调用层
└─scheduled 定时程序包
服务
服务器总共由5个程序维持
- 主程序:包含绝大部分游戏操作,以及web层的访问,可通过http和redis-list调用聊天服务器
- 聊天服务器:包含与客户端的webosocket连接以及代理其他程序的实时响应操作
- 组队服务器:维护队伍状态,以及对队伍的操作
- 定时任务:定时执行服务器任务,包括服务器维护、游戏内容任务,独立出来后减少了其他程序崩坏对定时任务的影响
- 服务监控:检测各程序的线上状态,并进行维护重启,由于没有引入复杂完整的rpc框架,所以需要一个简单的服务监控程序