这几天服务器突发一个bug, 登陆的人员会发生串号, 就是A玩家登陆后, 得到B玩家的角色.
这个bug触发的主要原因是网络底层在得到一个客户端的连接请求时, 会分配一个id,而这个id是用栈在保存的,当有新的连接, id就出栈, 当连接断开时,id入栈, 这样就导致了id被重复利用的次数非常高,尤其是某些id. 当这些id生成后,会进入登陆队列,等待登陆结果, 如果这个时候登陆认证模块的速度很慢, 或者说这个时候客户端退出了, 这个时候的id就是一个无效id了, 可是这个只有网络底层知道, 这就造成引用层编写的难度. 所以最好的解决方案就是每次的连接id都是不一样的,类似操作系统的HANDLE