情景:server人数2000左右,client在玩家打开某个界面的时候向服务器请求服务器的当前时间来同步客户端本地时间。
分析:按理讲服务器拿系统时间的这调用的开销是微不足道的,但是会出现服务器卡的情况。。。
原因就是虽然这个请求服务器时间的操作是不频繁的。。。但是考虑到每个服务器有2000人,若再同一时间有1%的人同时请求这个时间,就会有20个人同时请求。。。所以每时每刻都会有20个请求去向服务器请求当前的时间。。。这就造成了服务器会处理大量的消息和发送大量的消息。。。这个开销还是很大的。。
所以才会出现客户端玩家感到卡的情况。。。
解决办法:在玩家进入游戏世界的时候,每个玩家都向服务器请求一下服务器的当前时间,然后客户端自己在本地计时。(若某个应用是在玩家登陆后的一段时间之后需要根据服务器时间做出反应的。。。考虑到长时间计时会有误差。。。可以在此时再由这个玩家向服务器同步一下本机时间。。。但是这个应用不能是很多玩家参与,且不能频繁的请求服务器的时间)。
结论:所以服务器卡的现象不是由于取当前的服务器时间的这个函数造成的。。。。而是由于服务器每时每刻基本上都会处理几十个连接请求导致的。