服务器架构 1台代理服务器,职责 转发C/S之间的消息 跨线聊天 跨线社交 跨线交易 换线应用的原子控制 统计玩家操作记录 管理控制台 +台应用服务器,职责 场景消息同步 推送玩家数据到存储服务器 +台数据存储服务器,职责 缓存在线玩家数据 持久玩家数据
代理服务器的设计 代理服务器最主要的工作是转发C/S之间的通信消息。代理服务器会维护一张玩家表,上面结构化的描述了每一个在线玩家的{Id,socket句柄,当前线路,当前状态(manual,auto)},从客户端过来的应用消息包首先会经过过滤模块,将一些定义在代理服务器完成的应用拦截下来,如果不是代理服务器的工作接下来会在玩家表上找到自己所在应用服务器的ip并将消息包原样发送,同时消息包会进入统计系统,{谁 何时 计划做什么}。从应用服务器过来的消息不会经过过滤模块,直接进入转发和统计系统,{谁 何时 实际做什么}
跨线的应用主要利用玩家表实现了快速查找,这些应用在代理服务器实现减少应用服务器压力。
注:玩家的视野消息由代理服务器转发,所以代理服务器拥有某个角色的当前视野范围({player,[id]}),快速查找,快速广播。 换线应用的原子控制是指某个应用需要切换到另外一个线路上的应用服务器执行,代理服务器会创建一个原子上下文,缓存应用的请求消息,在换线完成后代理服务器将应用的请求消息发送到新的应用服务器。回收原子上下文。
内嵌一个http服务即可实现一个web管理控制台,负载查询,数据查询。
关于代理服务器的设计其实并不理想,处理的业务过多不够单纯。无论从开发还是维护,都比较让人头疼。 |