zoukankan      html  css  js  c++  java
  • [转]MMORPG游戏服务器端的设计

    MMORPG不同于其它的局域网的网络游戏,它是一个面向整个Internet的连接人数过万的网络游戏,因此他的服务器端设计则极为重要 

    服务器的基本设置 

      在大型网络游戏里,通常设计为C/S结构,客户端不再对数据进行逻辑处理,而只是一个收发装置,从玩家那里接受到操作信息,然后反馈给服务器,再由服务器进行处理后发回客户端,经客户端通过图形化处理,给玩家呈现出一个缤纷的游戏世界。 

    登陆服务器 

      在这里也可以称之为连接服务器,网络游戏的客户端一般是连接到这里,然后再由该连接服务器根据不同的需要,把游戏消息转发给其它相应的服务器(逻辑和地图服务器)也因为它是客户端直接连接的对象,它同时也负担了验证客户身份的工作。 

    地图服务器 

      在这里也可以称之为连续事件服务器。在这个服务器里要处理的对象(玩家)所做的动作都是一个连续事件。例如玩家从A点移动到B点,这样一个动作,需要一定的时间进行移动,因此说移动是一个连续事件。 

    逻辑服务器 

      在这里可以称之为瞬时事件服务器,在这个服务器里,处理对象(玩家)所做的动作均可以在非常断时间内完成完成。例如玩家从商店购买一瓶药书,当玩家确认购买后,服务器先扣除玩家的游戏币,然后再把相应的药水瓶加入玩家的背包里。这2个操作对于服务器来说,只是2个数字的加减,计算完这两个数字的加减,这个事件就可以结束了。因此,我们可以说这个事件是一个瞬时事件

     

     

    服务器组的改进 

    不过在实际应用的过程中,游戏服务器的结构要比上面所说的3种服务结构要复杂些,不过也都是在这3种最基本的服务器架构下进行扩充,扩充的主要是其它辅助功能。在实际应用里可能增加的2种服务器,数据库服务器,计费服务器,由逻辑服务器独立出来的聊天服务器。

    数据库服务器 

      数据库服务器其实就是专门利用一台服务器进行数据库的读写操作。这点特别是在大型的网络游戏里尤为重要。因为在大型网络游戏里,要处理玩家的数据量非常大,如果不利用专门的服务器进行处理,很有可能会拖累这个服务器组。 

    计费服务器 

      通常在商业的网络游戏里出现,用于记录玩家在线的时间,给收费提供依据,同时也是整个服务器组里最重要的部分,一旦出现问题,运营商就不用赚钱了。 

    聊天服务器 

      在游戏里的聊天功能是属于一种瞬时动作,理论上是放在逻辑服务器里进行处理。不过在大型网络游戏里,因为这个部分功能与游戏里的其它部分联系并不紧密,因此可以独立出来做一个功能服务器。 

     

     

    服务器的集群设置 

      在大型游戏的应用过程中,实际需要处理的玩家数量可能过万,一台普通的服务器是无法完成所要完成的工作,因此,在实际应用的时候,通常是由一组多台服务器共同完成一个功能。 

      例如地图服务器,可以根据需要,把游戏里所有的地域进行划分,划分为N个区域,然后让这一个区域里发生的事件都用一个特定的服务器进行处理。这样做的目的是减少一个服务器所承担的计算量,把整个系统组成一个分布式的网络。 

      不过这样做的同时会造成一个麻烦:当一位玩家从区域1,移动到区域2。这个时候,就必须先在服务器1里把玩家删除,然后再在区域2里加入玩家。同时需要由服务器1向服务器2转移玩家的数据信息(因为服务器组在工作的时候,玩家的信息只能保存在当前所在区域的服务器里),也就是说一旦玩家发生服务器间区域移动,服务器端就不可避免的造成数据通讯。因为这种移动并不是有规律的,玩家所在的服务器都有可能到达其它服务器。这样,如果服务器组里有N台地图服务器,那么,每个服务器都可能向其它N-1台服务器产生连接,总共就可能产生N×N个连接。如此数量连接如果只是使用普通的socket设计,就很有可能会给服务器通讯间的各种问题所困扰,为此,在商业网络游戏的服务器之间,通常都使用成熟的第三方的通讯中间件,如ACE,ICE等作为网络连接的传输层

  • 相关阅读:
    learning scala view collection
    scala
    learning scala dependency injection
    learning scala implicit class
    learning scala type alise
    learning scala PartialFunction
    learning scala Function Recursive Tail Call
    learning scala Function Composition andThen
    System.Threading.Interlocked.CompareChange使用
    System.Threading.Monitor的使用
  • 原文地址:https://www.cnblogs.com/kex1n/p/2127392.html
Copyright © 2011-2022 走看看