服务器——UID

一、介绍

在rpg这类游戏中,有大量的实体存在,实体包括玩家、NPC、怪物、坐骑、宠物等等,每天实体有一个id,这个id是在实体创建的时候生成的,我们称之为uid,通过uid我们可以获取到实体对象。(对于玩家实体它们还有一个id,是在玩家注册账号的时候db生成的id,我们称之为dbid,用于数据库中记录玩家唯一标记。)

 

二、uid设计

uid是实体的唯一标记,通过uid我们需要查询到实体对象。uid设计重要考虑的是怎样通过uid查询到实体对象。这里有几种设计方案:

方案一:map存储

map的key值为uid,value为实体对象指针。查询时间复杂度lg(n),map底层是红黑数当实体创建或删除的时候红黑树需要进行调整,当实体删除或创建频繁的时候性能消耗也会增大。

方案二:数组索引

uid是服务器自己生成的,那我们可以让uid从1连续递增生成,通过索引搜索效率可以为常数级。当有实体创建的时候可以一次创建一批,供后续实体创建使用,实体删除可以将uid回收用于后续新创建的实体使用。

实现过程,定义一个数组,用于记录当前服务器中创建的实体,通过uid可以直接搜索到实体对象指针,再定义一个列表用于记录空闲的实体,当我们需要一个uid对象的时候,我们去列表中获取一个,如果列表为空,我

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值