一 登录顶号
问题:
首先需要弄明白的是,一个客户端只有一个pomelo实例。
当用户登录之后,不退出,重启客户端。
服务器检测到玩家已经登录,会将之前的登录踢下线,客户端会触发disconnect事件,在disconnect中断开pomelo链接。
这样导致当前的链接也被断掉了。
解决方案:
目前处理方式是在disconnect中不断开链接。但这样处理有个问题,当服务器链接不上时,会有一个报错。
原因目前还在查找,找到了再来更新,有路过的小伙伴儿有其他的解决方案也欢迎留言讨论。
二 数据库触发器
问题:
数据库中有两种表User和Level,添加了一个触发器,当在User表中插入数据时,
在Level表中也生成一条记录,保存玩家初始的关卡数据。
这种的设定看上去合符逻辑,没有问题,但是运行的时候问题出来了。
当玩家创建完角色之后,会马上请求返回玩家的信息,这是就会去查询玩家的Level表。
这时候触发器有可能会没有完成数据库中Level表的操作,导致读出来的数据为空。
解决方案:
由于触发器操作在程序中没办法控制,所以只好抛弃它了。
在User表中插入数据的之后,继续在Level表中增加一条记录,然后在返回数据。
三 全服排行
问题:
要全服排行榜,要拿到所有服上玩家的数据做比较。由于分布式架构,玩家的数据库之中,是拿不到彼此的数据。
解决方案:
拿出一个单独的服务器来生成玩家的UID,使得所有的玩家UID都不重复。
然后将需要比较的玩家数据比如说战力或者等级,也放到对应的UID记录中。
这样,每次排行只需要到排行服务器来查找就可以了。
四 数据初始化
问题:
要实现一个全服的竞技场,每报名的玩家会根据报名的顺序分到一个组,每组一百人。
这样的话就需要在服务器启动的时候把生成一个groupId,如果满一百人,就放到下一个groupId中。
但是现在不知道在什么地方初始化这个groupId。
解决方案:
暂时未解决