服务器性能随着在线玩家数量的增加而降低,有几个方面 1.在线玩家数量变多,和玩家通信的消息变多,消息接收发送和处理需要时间,消息new delete会引发gc 2.在线玩家数量变多,内存中的对象数量变多,gc的时候遍历时间加长(c#的gc会stop the world) 3.在线玩家数量变多,tick的逻辑线性增加 优化1 针对1的优化就是减少消息量,这里最明显也是比较容易改的就是聊天服务器独立出来,世界聊天是广播的,数量很大(数量占所有发送数据的29%) 优化2 a.想办法减少对象数量,某些class可以用struct代替 b.world服务器现在player对象申请后是不删除的,修改这个,下线一定时间后删除(为了兼容比赛,时间可以长一点,比如2小时) 优化3 进程拆分,比如world服务器的打地鼠和跑马独立一个进程处理 优化4 多进程部署,game服务器可以修改成多game支持,这个容易,因为game的逻辑大部分都是基于单玩家的,没有互相之间的关系 优化5 好友服务器特殊说明一下,好友由于大量的数据在内存cache,对象多,gc的时候慢,一个也是减少对象的生命周期,不需要了及时删除 第二,思路也是多进程支持,由于玩家的数据会在玩家的好友那边 存在,所以需要按uid分配到不同的进程,分配的进程负责玩家的写操作,其他进程可以对这个玩家进行读操作