PHP游戏开发实践.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PHP游戏开发实践 DEVLINK⼤会 PHP游戏开发 1、傲慢与偏见 ▸ 偏见的产生 历史 端游 - 页游 -手游 印象 运营后台、官网等边缘业务 ▸ 实际的案例 社交类 开心农场、超级店长 页游类 猛将无双、女神联盟 手游类 大掌门、城市精灵 ▸ 性价比 招人 相对容易 优点 快速迭代,热更新 对比 1php vs 3~4客户端 PHP游戏开发 适合什么类型的游戏? ▸ 页游到手游 大部分页游和手游都适合 ▸ 游戏类型 社交、卡牌、slg、rpg等 PHP游戏开发 与WEB开发的差异 ▸ 单机极致 web的无状态演变出很成熟的横向扩展能力 游戏更考验单机能力的最大化 ▸ 缓存不易 web可以做各种数据静态化处理 游戏基本是动态请求处理 ▸ 读写比例 web读写比例较大 游戏基本每个请求基本都有数据的读写 PHP游戏开发 百万级DAU游戏的开发经验 ▸ 配置极致的缓存 之 三级火箭 进程内的缓存 本机共享内存 分布式共享内存 ▸ 配置优化很重要 配置代表数值,游戏的基石之— PHP游戏开发 ▸ 代码片断 public function getByCache($cacheKey) { ▸ ▸ ▸ //进程内的缓存 if (!empty(self::$readCache[$cacheKey])) { return self::$readCache[$cacheKey]; } //本地缓存 if(!empty($localCache)) { self::$readCache[$cacheKey] = $localCache-get($cacheKey); } //网络缓存 if(!empty($netCache)) { self::$readCache[$cacheKey] = $netCache-get($cacheKey); $localCache-set($cacheKey, self::$readCache[$cacheKey]); } PHP游戏开发 ⼀些坑 ▸ 缓存单条数据,而不是整张表 —个大数组的反序列化的开销非常大 ▸ Yac 有概率取到错误数据 不是取不到数据,而是错误数据 ▸ 如何更新 flush共享内存 配置文件用redis不同的库 (selectDb) PHP游戏开发 游戏数据的特点 ▸ 数据量小 ▸ 快 ▸ 数据相对独立 PHP游戏开发 选⽤REDIS ▸ Hash结构非常适合游戏的用户数据结构 —个用户的数据是—个hash,如 userid_111 : { info: {}, bag:{}, item:{}…. } ▸ 性能彪悍、可持久化 ▸ 结构非常多,zsort做排行,key-value做cache等 PHP游戏开发 REDIS的问题 ▸ 内存的需求无限增长 ▸ 不合适做gm数据查询 ⼀些解决⽅案 ▸ 改造redis: redis-storage ▸ 后台直接读取leveldb PHP游戏开发 5MS级别的业务请求处理时间 ▸ 天下武功,唯快不破 ▸ 不论业务的复杂度如何 ▸ —个api请求,只—次读取数据,—次写入数据 PHP游戏开发 ▸ 执行流程 PHP游戏开发 好处 ▸ 非常快,基本可以达到5ms~10ms的处理时间要求 ▸ 不产生脏数据,在业务逻辑任何—步处理失败 都可以很安全的抛出异常,不会写入任何数据到db ▸ 业务逻辑简单,清析,不产生瓶颈 PHP游戏开发 安全很重要 ▸ 请求防伪造 数据加密 ▸ 请求防并发 把并行请求变成并行请求 1)同—用户 2)每个请求到达之后,第—步先获取—个请求锁,处理完成之 后再释放锁 (可以用redis的setnx机制) PHP游戏开发 ⼀般外挂的处理 ▸ 同—ip请求密度监控 不可靠(同—局域网) ▸ 同—用户的请求密度监控 不可靠 (人工的疯狂点击也应该存在) ▸ 同—用户每天的行为阔值监控 可靠 (每天的产出是固定的) ▸ 社会工程学 外挂有—定的规律性 PHP游戏开发 ⼀些⼩经验 ▸ 和策划的配置的配合 1) 配置的规律化 2)配置的自动化 PHP游戏开发 配置的规律化 ▸ ID的规律化 举个例子 技能Id = 技能类别 + 等级 600101 = 600100 + 1 好处 通过id就可以获得很多有用的信息,不需要反查表 ▸ 奖励规律化 [[奖励类型,奖励标识, 奖励数量]] 举个例子 [[1, 2, 200]] 表示 获得声望 金币 200个 随机奖励 [[4, [[1,2,200]: 30, “”: 70]]] //表示[1,1,200] 30%的概率获得 ▸ 条件规律化 [[条件类型, 条件id, min, max]] 举个例子 [[1,1, 20, 999]] //表示等级达到20级才能操作 PHP游戏开发 配置的⾃动化

文档评论(0)

智慧IT + 关注
实名认证
内容提供者

微软售前技术专家持证人

生命在于奋斗,技术在于分享!

领域认证该用户于2023年09月10日上传了微软售前技术专家

1亿VIP精品文档

相关文档