公司的服务端架构可能有点问题···有些敏感数据都存放在客户端这样很危险。··
敏感数据:
玩家金钱,游戏中的加减钱,游戏结算的加减钱,玩家的牌的逻辑数据,玩家发送的命令。
这些数据都必须经过服务端的校验才能转发给其他客户端。
目前的架构来说存在安全隐患,这样做虽然能减轻服务器压力,但是以后肯定修改起来相当麻烦,安全漏洞太严重。
个人认为,理想的服务器架构是:当玩家进入同1桌开战时候,服务器应该保存有客户端的逻辑内存,包括玩家牌的逻辑数据,服务端做校验的算法内存应该和客户端的算法内存是一样的,这样可以防止因为单个客户端的非法修改引起同1桌内其他玩家数据错乱。玩家唯一能做的事就是给服务器发送命令,而不是和其他同一桌客户端进行转发内存的通讯(断线重连时候,重连玩家可以从服务器上获得1份正确的内存块)
数据库非法断链,服务端异常关闭引起的问题会导致玩家数据丢失。这个我觉得可以先写个类似LOG的程序解决,绝不能将玩家加减钱的信息存在内存中,理想的状态应该是记录LOG,然后从LOG 1次扫入数据库内,既高效又省时。
数据通讯:IOCP确实很高效,但是有时候会因为某些游戏的外挂引起游戏通讯问题,具体表现为内存冲突和端口冲突,不知道为什么有些游戏外挂会影响端口。
对于看牌器这类的外挂,我觉得一般很难防止,总不可能连玩家可否出牌的判断都交给服务器去做,那样影响体验。再牛B的游戏也会有出外挂的那1天。唯一能做的就是加密比解密的更牛B才行。
服务端的扩展性设计问题,···增加任务系统,增加排名系统,增加其他第3方扩展。其实还是数据和通讯的事