入行不久,一直处于学习的状态,今天写代码的时候就遇到一些小问题。
首先是做建筑升级和建造的时候,考虑的不够周到,少给升级和建造中的建筑加个状态,平时自己测的时候都是慢悠悠的输入指令,然后等待客户端接收服务端返回升级完成后的消息。今天自测的时候,客户端连着多发了几次升级请求,就出现问题了。虽然能收到队列系统返回的队列被占用中的回复,但是在指令送到队列之前,得先经过一堆逻辑判定,这些地方其实都是可以省掉的。后来给建筑多加了一个标记,表示升级中的状态。
这是模拟客户端第一次收到的回复,显示我请求升级成功了,建筑升到了12级。
怎么建筑又变成11级了,跑去数据库看了一下,已经升到12级了啊。
后面检查了一会儿,发现是自己在服务端处理客户端消息的时候,以及在升级完对建筑进行处理的时候出了问题
1.收到客户端请求的第一时间,在消息处理模块中,我就把building从建筑table里取了出来,这个时候的建筑还是11级的。然后进行升级操作。
2.然后在处理建筑升级和建造的模块中,我把建筑和升级当成了一种情况处理了(偷懒不是好习惯,想得不够细),粗暴的将升级一个建筑当作重新生成一个新的建筑,然后新建筑的等级比原来的高一级,在放入建筑table中。然后在建筑模块中把新建筑的信息推给客户端。
3.后面在消息处理模块中,组织数据格式的时候,建筑数据的来源都是第一个building的,所以后面推的那次等级才是11级。
知道原因后,后来在建筑模块中把处理方式细分一下就好了。
不过暴露了自己还是不够细心,对数据的修改和存取的对象没有充分的考虑,以后在写代码的时候,涉及到这种地方还是得多想想,别偷懒。
网友评论