集群式游戏服务器架构方案设计开发(3)

时间:2009-11-20   来源:   网友评论:0   人气: 1307 作者: 胡章优 吉林大学机械学院

  •   SOCKET _listenHallServer;   
  •   HANDLE ListenThread;   
  •   
  • public:   
  •   void Start();   
  •   THallServerList(int port);   
  •   //Accept线程   
  •   static unsigned __stdcall ListenThreadFunc(LPVOID lpVoid);   
  • };   

  • 上面的代码是该设计方案的类代码。从代码中我们可以理解出思想如下:
      Conn Server里面存在一个THallServerList对象,该对象监听端口,当有HallServer连接过来,将该HallServer存入队列,并实时获取该Server当前的压力情况,可以起到一个负载均衡的作用。而保持的HallServer队列,当客户端连接过来,Conn Server则从pHallServerList中将当前currentConn最小的服务器发送给客户端,以后客户端将同该Hall Server发起连接。
      在该系统中,当我们的Conn Server不够的时候,可以考虑架设多台Conn Server,当客户端无法连接时候,程序自动连接下一台Conn Server.比如conn1.doserver.net、conn2.doserver.net、conn3.doserver.net、connn.doserver.net。

      图三中是按照组划分的系统组成。该方案目前来说,我还并没有实施过,只是在方案上面进行过探讨。希望有时间我可以设计一个案例出来再做展示。

    game4.jpg 

    [图四:改进的功能划分集群GameServer架构二]
    在项目的实施过程中,我发现了Hall Server其实并不需要同Logic Server进行交互,如果Hall Server在保留同Client的1W多连接的情况下依然保持过多的同Logic Server的连接,势必压力非常大,这时候如果在之间使用ISServer来交互,就可以减少很多的连接数量,也使得系统更加清晰。
      Hall Server只需要获取所有的Logic Server的名称,Logic Server的地址,Logic Server的端口,以及当前的连接数量。所以通过之间的一个信息服务器作为桥梁,就可以很好的解决这个问题。这种架构就可以达到非常完美的解决上面提到的4个难点的问题了。
      
    后记:封闭开发之余,很想把自己的在服务器开发的经验分享一下,所以就借用了2个小时整理此小文,希望大家喜欢。同时欢迎大家指点,建议。也欢迎转载,但是务必保留版权以及原作者信息。非常感谢。
     


     

    相关文章

    文章评论


    新闻排行榜

    最新信息