本文只是提供一些游戏服务器优化思路,其中一些思路是用在不同场合的,不是同个架构的。需要根据应用场景选用合适方式。本文的引用的文章都是在自己写的在本博客内的,也都是上线开几百个服的成熟项目的。
一、框架设计优化
1、分静态服务器和动态服务器。
2、动态服务器使用两层负载均衡:多网关 和 多场景。网关的选择是登陆服务器根据网关的负载来选择。场景则作为分线和副本等分开。
框架图参考:http://blog.csdn.net/chenjiayi_yun/article/details/18891591
3、中心服务器负责服务器依赖检查和内部消息转发和控制登录流程。中心服务器会主动连接登陆服务器和后台服务器。其他服务器会主动连接中心服务器。中心服务器有主动连接和被动连接的管理器,可根据需求的服务器类型来查询需要的连接。
中心服务器参考:http://blog.csdn.net/chenjiayi_yun/article/details/19329287
二、业务设计优化
1、网络
多线程使用
方式一:网络被动连接线程池
被动连接线程池 http://blog.csdn.net/chenjiayi_yun/article/details/17793459
(1)动态线程调度
网络接收线程池的动态线程调度策略。接收发送网络使用多线程,每多增加512连接动态增加一条线程。
动态线程调度策略参考:http://blog.csdn.net/chenjiayi_yun/article/details/35922173
(2)网络收发处理优化
有读才可能有写(优先读)。使用单独的epoll描述符来处理读(读epoll描述符不处理写,另一个epoll描述符处理读和写)。每隔一段时间才写。写是检查写缓冲区。
(3)网络消息队列
读的是无锁队列。参考:http://blog.csdn.net/chenjiayi_yun/article/details/36190543
写会写缓存。使用发送字符队列,参考:http://blog.csdn.net/chenjiayi_yun/article/details/37933099
方式二:逻辑网关
(1)对于树状多网关对象的单逻辑服务器。读写线程使用不同线程。连包使用单独线程。监听连接使用单独线程。
逻辑网关对象参考: