站务联系

内容

(75)游戏服务器开发的基本体系与服务器端开发的一些建议(4)

发布时间:2021-03-12   来源:网络整理    
字号:

开源框架: Libevent, libev, ACE

2.4 数据持久化

自定义文件储存,如《梦幻西游》

关系数据库: MySQL

NO-SQL数据库: MongoDB

选择储存系统要考虑到诱因:稳定性,性能,可扩展性

2.5 内存管理

使用内存池跟对象池,禁止运行其间动态分配内存

对于输入输出的表针参数,严格检测,宁滥勿缺

写显存保护。使用带显存保护的函数(strncpy, memcpy, snprintf, vsnprintf等),严防数组下标越界

防止读显存溢出,确保字符串以'\0'结束

2.6 日志系统

简单高效,大量日志操作不应当影响程序功耗

稳定,做到服务器崩溃是日志不遗失

完备,玩家关键操作一定要记日志,理想的状况是通过日志能重建任何时刻的玩家数据

开关,开发日志的要加级别继电器控制

2.7 通信协议

采用PDL(Protocol Design Language), 如Protobuf,可以同时生成前前端代码,减少前前端合同联调费用, 扩展性好

JSON,文本合同,简单,自解释,无联调费用,扩展性好,也很方便进行包过滤以及写日志

自定义二进制合同,精简,有高效的传输功耗,完全可控,几乎无扩展性

2.8 全局惟一Key(GUID)

为合服做打算

方便追踪道具,装备流向

每个角色,装备,道具都应对应有全局惟一Key

2.9 多线程与同步

消息队列进行同步化处理

2.10 状态机

强化角色的状态

前置状态的检测校准

2.11 数据包操作

合并, 同一帧内的数据包进行合并,减少IO操作次数

单副本, 用一个包尽量只保存一份,减少显存复制次数

AOI同步中提高后边过程无用数据包

2.12 状态监控

随时监控服务器内部状态

内存池,对象池使用状况

帧处理时间

网络IO

包处理功耗

各种业务逻辑的处理次数

2.13 包速率控制

基于每位玩家每条合同的包速率控制,瘫痪变速齿轮

2.14 开关控制

每个模块都有继电器,可以紧急关掉任何出问题的功能模块

2.15 反外挂反作弊

包速率控制可以赶走变速齿轮

包id自增校准,可以赶走WPE

包校验码可以赶走包拦截歪曲

图形辨识吗,可以废掉99%非人的操作

魔高一尺,道高一丈

2.16 热更新

核心配置逻辑的热更新,如防沉迷系统,包速率控制,开关控制等

代码基本热更新,如Erlang,Lua等

2.17 防刷

关键系统资源(如元宝,精力值,道具,装备等)的产出记日志

资源的产出跟消耗尽量依赖两个或以上的独立条件的测试

严格检测各项操作的后置条件

校验参数合法性

2.18 防崩溃

系统底层与详细业务逻辑无关,可以用大量的机器人压力检测显露各类bug,确保稳定

业务逻辑建议使用脚本

系统性的保证游戏不会崩溃

2.19 性能优化

IO操作异步化

IO操作合并缓写 (事务性的递交db操作,包合并,文件日志缓写)

Cache机制

减少竞态条件 (避免经常进出切换,尽量降低锁定使用,多线程不一定因为单线程) 多线程不一定比单线程快

减少显存复制

自己检测,用数据说话,别猜

2.20 运营支持

接口支持:实时查询,控制指令,数据监控,客服处理等

图说天下

  • 4页:
  • 上一页
  • 1
  • 2
  • 3
  • 4
  • 下一页
  • ×
    二维码生成