一次游戏服务器编码规则制定的经历

本文探讨了游戏服务器角色ID的编码规则优化及其面临的挑战,包括如何平衡ID的可读性和唯一性,以及服务器命名规则的设计,以满足不同人群的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

独立小桥风满袖,平林新月人归后。

一次游戏服务器编码规则制定的经历

  • 角色id的更改

    • 游戏角色的id是根据platform+serverId+十三位自然增长的数字拼接而成。一共有19位,但是运营表示这太长了对客服和玩家太不友好了,所以希望将其更改为10位。这样的需求显然是合理的。当时有两种方式一种是将19位数字转化为32进制。但是考虑到子母的发音辨识度低所以舍弃了。第二种是专门为角色id设计一种短id,提供给游戏外部的人员使用(客服,运维等)。

    • 游戏内部之所以采用这种长编码方式,是因为追求统一的id管理,游戏内部的所有id都是通过同一种方式获取。

    这种追求统一的处理方式虽然简洁,但是也付出了很大的代价。第一是角色id过长对玩家不友好。第二游戏内部很多时候id申请都是临时的,这些id并不需要全局唯一,这样导致id很快就被消耗殆尽。但是十九位已经是long型极限了。采用更长的id会增加服务器的负载压力。

    这个问题的根源在于在追求统一的过程中,没有考虑到编码所需要的特性。比如角色id需要提供给人取阅读,所以需要可读性。只有很少的id是需要入库的,许多怪物都是刷新之后立即被打死了,所以id的需求量很大,但是不入库的id是不追求永久性的id唯一。

    • 采用了短id之后有出现了新的问题:编码不统一,但是代码是按照同一的方式来处理,兼容性弱。

    在采用了短编码的方式之后,新增了一系列问题。从id到角色的映射关系要做两套。从客服运营到游戏内的长id都要从短id转一遍。我在做情缘榜的时候需要隔一个小时输出一份排行榜详情,然后我就顺其自然的输出了长id,后来我突然想起来要给别人看必须输出短id。这都是两套映射关系带来的问题。

    第二个问题是我自己的问题。我在设计短id的时候想到要用十位,所以用了int。很明显数值越界了。

    • 我对这个问题的看法是追求统一的编码方式的总思想是没有问题的,关键问题在于抽象出同的部分。游戏内部期望的是编码的值类型统一,比如都是string或者long。至于编码到底是十位还是十九位,游戏内部出了编码容量以外,没有地方用到编码长度的信息。所以可以允许角色id和其他id的长度不同。只需要有两套接口即可。这个问题想的更深一些是如何抽象相同的部分。在抽象的过程中要仔细考察面对的事物的各项特性,比如角色id就有可读性的要求,怪物id就有量的需求。但是这些对象都需要一个id来区分。游戏内部对id有逻辑简洁的需求。编码规则一旦制定改动成本极其高昂,所以有不变的需求。等等诸如此类的特质都要尽可能深的考虑。
  • 服务器命名规则

    • 服务器在测试期间经常要提供给不同的人群使用,比如测试,运维,运营,客服,支付sdk,策划等,这些不同的人群需求特性分析下来有如下几点

    • 测试需求方便测试各项功能,所以要求有gm,能改服务器时间。

    • 运营需要调整各项数值,而且需要数值更改后能及时的反映在游戏中。
    • 客服和支付sdk属于外部系统接入,一般需要通过外网访问,还需要代码调试编写等。
    • 策划需要体验游戏内的各项功能,所以要关闭GM以防别人干扰其体验。
    • 外部审核系统需要一个稳定的服务器,不希望一直重启。但是他们对细节和bug不关心。只关心游戏流程是否顺畅,审核的内容是否正常即可。
    • 临时人员的需求,比如商务,行政等人经常临时需求开一个服,且服务器列表只有一个。他们的需求很多时候是临时的用一会儿就再也不会用了。但是他们不希望服务器重启。
    • 一般需要备用一个和线上服务器一模一样的镜像服,以便bug查找,热更测试等,所以需要一个镜像服。
    • 手机游戏一般会区分安卓和ios,他们的付费系统一般是不同的,ios的付费性要好一些。
    • 综上所述,提出如下解决方案:
    服务器名称功能人群gm频繁重启需要外网
    安卓QA安卓功能测试QA
    苹果QA安卓功能测试QA
    安卓体验安卓体验运营,策划
    苹果体验苹果体验运营,策划
    安卓线上镜像镜像研发,QA
    苹果线上镜像镜像研发,QA
    客服日志功能开发研发,客服研发
    支付测试sdk接入研发,sdk研发
    安卓审核审核外部审核人员
    苹果审核审核苹果审核人员
    安卓渠道测试1渠道测试渠道人员
    安卓渠道测试2渠道测试渠道人员
    安卓渠道测试3渠道测试渠道人员
    备用服务器1未知渠道人员
  • 服务器备注规则

    • 服务器备注一般提供给研发和运维使用,需要提供服务器的配置,地址,登入方式等。
机器名配置内网ip外网ip用途登陆方式 【密码:x】
lhrgss8核32G1.1.1.1211.1.1.53送审服ssh -p 30022 root@ip
game38核64G500G1.1.1.651.1.1.194线上服1ssh -p 30022 root@ip
云mysql对应服务器6,8,10实例rm-uf66prx8mysql -hip -uroot -pxx

- 服务器端口ip规则

  • 服务器需要配置每个端口的开放权限,内网ip与外网ip的权限
端口用途绑定地址开放范围
11serverId游戏服客户端连接外网所有
12serverId客服与支付外网客服ip+支付sdk出口ip
13serverId游戏服进程外网中央服+Ali其他游戏服的ip
14001中央服进程外网其他游戏服的ip

- 服务器id编码

  • 服务器一般区分不同的运营平台,所以用一位platform和四位自然增长的id。

    这些区分只需要体现在serverid上即可,不要在配置中分开设置platfrom和serverid,不然其他外部人员很难懂

服务器id用途
19999中央服
x0001-x9998游戏服
1-997游戏服
Platform2安卓服,3ios服,4混服
例子:40004表示混服0004服

- 服务器在运维过程中,需要如下指令

指令功能备注
关闭进程关闭所有/某个服务器进程
暂停服务剔掉所有在线玩家,封禁外部ip
封禁/解封ip开服用
同步文件将文件同步到指定或者全服服务器目录下
查询封禁状态查询指定服的封禁状态
加载配置表热更配置表
加载服务器代码热更代码
查询/修改最大在线人数

- 服务器在运行过程中需要实时监控各项状态,如果超过阈值应该由部署在其他机器上的守护进程发出警告。

监控项监控等级阈值
社交服内存warn80%
cpu单核warn90%
cpu总核warn60%
单个异常warnNA
内存超限error70%
单个异常频率超限error10次/s
宕机errorNA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值