框架模型如下:
Server部分分为四部分:Access接入层、Dispatcher事件分发层、BusinessLogic业务处理层、Data数据层
Access接入层:
供客户端接入
Dispatcher事件分发层:
从各类事件请求Server(Event.Request) ------> 转发------>相应的事件处理Server(Event.Response)
BusinessLogic业务处理层:
处理相应的业务逻辑
Data数据层:
处理数据
问题一:怎么从一个Server转发到另外一个Server?
1.Access.BusinessLogic,Data三层对应Server向Dispatcher注册(让Dispatcher知道你是谁)
2.EventMsg传递的时候带上EventMsg.src_type 与Event.src_serverid , 带上EventMsg.dst_type 与 EventMsg.dst_serverid 以及其它信息,知道你从哪里来,要到哪里去
问题二:怎么平滑无缝更新一个Server?
1.对于交互极少的Server.杀进程重启进程即可。如一个配置服务
2.对于快速处理事件的Server ,新进程替换旧进程 , 新老进程同时存在若干秒 (此时新进程处理新事件;旧进程不可以处理新事件,处理完旧事件后退出)。如一个用户存储Server
3.对于还在交互,并且将持续交互较久的进程,1.强制不接收新指令,待里面用户所有行为完成后退出 2.给个定时器,如最长10分钟,之后强制退出。在满足1.2情况之一重启新进程即可。如一个棋牌类的玩牌Server
问题三:Server是否可以复用?
比如开发棋牌类游戏,做好了一个德州扑克,再来个斗牛,再来个扎金花。。。形成模板复用,开发起来很简单吧
问题四:Server如何实现负载均衡?
1.对于接入层,客户端随机接入即可;
2.对于业务逻辑或者数据层,则增加同类型server,分散处理.
问题五:如何处理时间复杂度高的业务?
交个子线程处理,处理完后返还给主线程。
......
优点:
1.将业务子系统,子模块化,各个模块之间耦合降到最小,相互之间影响降到最小。
2.平滑无缝升级,升级不影响其它模块功能
3.业务和存储分离
4.某些Server可以模板化,复用程度高。