游戏开发论坛

 找回密码
 立即注册
搜索
楼主: zhcmeng

[广州] 找Erlang高手(内附开发经验干货)

[复制链接]

6

主题

106

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
 楼主| 发表于 2018-11-20 11:25:15 | 显示全部楼层
后端开发规范每日一贴:
  • 服务器安全性
    • 外界所有的输入,包括客户端协议、数据库、运营接口、后台工具等都必须严格检查,包括
    • 协议
      • 协议加密
      • 协议CD
      • 协议按功能开启限制
      • 协议长度
      • 协议按玩家状态限制
      • 协议单位时间内次数限制
      • 协议的内容正确性校验
    • 数据库
      • 数据库数据正确性检查
      • 数据库数据和配置进行比对
    • 运营接口
      • 运营接口输入日志和结果日志
      • 运营接口CD限制
      • 运营接口IP白名单
      • 运营接口加密
    • 后台工具
      • 访问服务器必须加密校验
      • 必要时增加IP、账号白名单限制
    • 资产、经验、属性、玩法资产等都必须有上限限制,并且由技术控制,不开放给策划配置
    • 角色名、帮会名等做严格的非法字符校验,防止SQL注入

6

主题

106

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
 楼主| 发表于 2018-11-21 10:46:18 | 显示全部楼层
数据库读存盘

    • 玩家登陆需要按固定的顺序加载数据库,存盘反向存储,体现在player_module.erl
    • 下列情况可能导致回档
      • 玩家存盘前的逻辑出现异常导致中断,造成存盘逻辑未执行,玩家进程再次启动时
      • 其他在服务器运行期间多次启动的进程,并且启动和关闭时有读盘和存盘逻辑,都可能因为存盘前的逻辑异常导致中断,造成存盘逻辑未执行,再次启动进程时
      • 服务器运行期间正常情况下只启动一次,并且启动和关闭时有读盘和存盘逻辑,在下次服务器启动时
      • 服务器运行期间正常情况下只启动一次,并且启动和关闭时有读盘和存盘逻辑,在意外发生导致进程重启时
    • 解决回档方案
      • 玩家进程在下线存盘前的逻辑,必须用try catch处理,即使前面发生异常也不会中断存盘逻辑
      • 其他在服务器运行期间多次启动的进程,采用玩家进程相同的处理
      • gen_server中增加try catch以增加健壮性,即使出现异常,也不会导致进程重启
      • 所有的数据库存盘异常都记录到专门的数据库异常日志(critical日志)中,服务器启动时发现该异常就强制停止启动,技术手工解决异常后再启动

6

主题

106

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
 楼主| 发表于 2018-11-22 10:48:38 | 显示全部楼层
  • 定时器
    • 所有的定时器都必须有回收,需要建立定时器的管理机制
    • 副本以往出现的问题,有相当一部分是由定时器引起的

6

主题

106

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
 楼主| 发表于 2018-11-23 09:53:56 | 显示全部楼层
  • 编码规范
    • 数据库更新脚本必须按统一命名,采用redmine单号_更新序号.sql 的方式
    • 每个系统都有协议号对应的错误码范围,错误码ID=语言包ID
    • 变量、函数命名完整,不采用缩写,明白无误表达含义,并且做到自注释
    • 一律禁止使用tuple结构做为跨模块接口、存储、协议、策划配置格式,推荐采用record

6

主题

106

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
 楼主| 发表于 2018-11-24 14:18:55 | 显示全部楼层
  • 日志
    • 采用工具屏蔽线上DEBUG日志,而不是用宏定义方式,避免函数参数执行
    • 必须有便利性日志打印机制,可以指定某些文件才打印日志
    • 日志打印需要统一,开关便捷
    • 日志函数命名必须统一,避免让人产生觉得debug日志是别人写的,不属于自己的感受

6

主题

106

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
 楼主| 发表于 2018-11-26 13:56:30 | 显示全部楼层
  • 日志报错
    • 每天专人收集主干和线上的错误日志并建单,所有开发优先修复
    • 每天的日志报错,都要由当事人划分错误类型,比如技术测试不严,策划配置问题、前端协议问题等
    • 每天的日志报错,还要归档及定期回溯,以此反馈和督促后端和项目组的开发质量

6

主题

106

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
 楼主| 发表于 2018-11-27 10:14:56 | 显示全部楼层
  • 进程管理
    • 绝大部分进程都必须可以重启重建,玩家进程除外
    • 场景相关进程根据场景类型采用不同的重启恢复策略
    • 必须有后台监控工具,可以便捷查看进程信息,避免登陆服务器查看的繁琐
    • init、handle_call、handle_cast、handle_info等函数都需要用try catch包围,避免异常导致进程关闭甚至又异常启动,所有异常都必须可捕捉,必要时才主动关闭进程

6

主题

106

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
 楼主| 发表于 2018-11-28 14:53:59 | 显示全部楼层
  • 进程间通信
    • 采用少量,小包的方式
    • 玩家信息收发必须判断玩家的状态,例如旧场景进程发信息给正在切线的玩家进程,需要做舍弃处理
    • 同样前端发过来的场景类协议,如果玩家已经离开场景,也做舍弃处理,详见服务器安全性-协议一节

6

主题

106

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
 楼主| 发表于 2018-11-29 13:59:37 | 显示全部楼层
  • 性能
    • erlang语言特性决定性能特性,要再开发期注意这些特性
    • 除此之外可以不用过多考虑性能影响,因为压测才能暴露性能问题,并且越晚做性能压测越好
    • 要有要有压测报告模板,并基于此编写实例报告

6

主题

106

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
 楼主| 发表于 2018-11-30 10:20:18 | 显示全部楼层
  • 功能开启
    • 未达到等级的功能不做数据库处理,不处理协议,不做逻辑处理,内部接口调用也要做功能开启判断
    • 功能管理分为大小两类功能,后端功能依据小功能ID,大功能对应UI界面
    • 提供接口方便运营线上关闭出现BUG的功能,并在修复后再次开启

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-4-24 20:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表