开发网页游戏服务器-技术选型

286 阅读2分钟

模型工具

  • 开发语言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框架,所以需要一个简单的服务监控程序