zoukankan      html  css  js  c++  java
  • 《游戏服务器的架构演进》阅读笔记

    一、游戏服务器特征

      1、定义:

      游戏服务器端,是一个会长期运行的程序,并且它还要服务于多个不定时,不定点的网络请求。

      2、关注点:

        稳定性

        性能

      这类程序如果需要多个协作来提高承载能力,则还要关注部署和扩容的便利性。同时,还需要考虑如何实现某种程度容灾需求。

      由于多进程协同工作,也带来了开发的复杂度,这也是需要关注的问题。

      3、特殊需求:

        对于游戏数据和玩家数据的存储

        对玩家数据进行数据广播和同步

        把一部分游戏逻辑在服务器上运算,做好验证,防止外挂。

      4、约束:

        功能性约束:

        实现游戏基本功能

        完成上述特殊需求

        非功能性约束:

        用户体验,保证软件易用性

        电脑内存和CPU的使用,要能尽量满足承载量和响应延迟的需求,也可以用各种缓存的方式来以求得CPU和内存空间上的平衡

        网卡,网络带宽直接限制了服务器的处理能力

     二、游戏服务器架构要素

      游戏服务端架构,三个部分为如何使用CPU、内存、网卡的设计:  

      1、内存架构:

      主要决定服务器如何使用内存,以最大化利用服务器端内存来提高承载量,降低服务延迟。  

      2、逻辑架构:

      设计如何使用进程、线程、协程这些对于CPU调度的方案,选择同步、异步等不同的编程模型,以提高服务器的稳定性和承载量。

      3、通信模式:

      决定使用何种方式通讯。

    三、长链接游戏服务器和弱联网游戏的区别

      长链接中,玩家是有状态的,服务器可以时时和client交互,数据的传送。

      弱联网一般每次都需要重新创建一个连接。

      长链接消息传送的频率以及速度上都快于弱联网游戏。

    四、网游服务器变迁:

      1、第一代服务器架构图:

      

      2、第二代服务器架构图(分区服):

      

      3、第三代服务器架构(世界服):

      一类型:

      

      二类型:

      

      三类型:

      

      4、房间服务器(游戏大厅)

      

    五、服务器类型功能

      1、场景服务器:

      它负责完成主要的游戏逻辑,这些逻辑包括:角色在游戏场景中的进入与退出、角色的行走与跑动、角色战斗(包括打怪)、任务的认领等。

      场景服务器设计的好坏是整个游戏世界服务器性能差异的主要体现,它的设计难度不仅仅在于通信模型方面,更主要的是整个服务器的体系架构和同步机制的设计。

       2、非场景服务器:

      它主要负责完成与游戏场景不相关的游戏逻辑,这些逻辑不依靠游戏的地图系统也能正常进行,比如公会聊天或世界聊天,之所以把它从场景服务器中独立出来,是为了节省场景服务器的CPU和带宽资源,让场景服务器能够尽可能快地处理那些对游戏流畅性影响较大的游戏逻辑。

       3、网关服务器:

      在类型一种的架构中,玩家在多个地图跳转或者场景切换的时候采用跳转的模式,以此进行跳转不同的服务器。

      还有一种方式是把这些服务器的节点都通过网关服务器管理,玩家和网关服务器交互,每个场景或者服务器切换的时候,也有网关服务器统一来交换数据,如此玩家操作会比较流畅。

      原文链接:

      https://mp.weixin.qq.com/s?__biz=MzI3MTQ1NzU2NA==&mid=2247483884&idx=1&sn=3547c769a300f1d82cc04e9b1852c6d5&chksm=eac0cd9fddb7448997e38a74e2d26bde259cd2127583e31bc488511bc1fdcd9f35caff27d4a3&scene=21#wechat_redirect

  • 相关阅读:
    SqlServer为字段创建索引
    学习java时在要求输出的数字带俩个小数点时,利用String.format时出现的问题
    JAVA字符串格式化-String.format()的使用
    Java中使用JSONTokener判断接口返回字符串是JSONObject还是JSONArray
    StringUtils工具类中的isBlank()方法和isEmpty()方法的区别
    Idea 隐藏不必要的文件或文件夹 eg:(.idea,.gitignore,*.iml)
    使用Gradle构建android应用
    Android开源库--SlidingMenu左右侧滑菜单
    cmd.exe-应用程序错误 应用程序无法正常启动(0xc0000142)
    Cocos2d-x 开发手记
  • 原文地址:https://www.cnblogs.com/guobin-/p/11014163.html
Copyright © 2011-2022 走看看