游戏服务器需要承载很多玩家,开发者需要选择合理的架构。Actor模型是一种常用的游戏服务端架构模型,在选用Skynet、Erlang方案的公司中广泛应用。

从硬件角度看待架构划分

游戏服务端选用的抽象模型,它既要符合硬件资源的运行特性,尽可能的提高运行效率,也要尽可能的符合对游戏内容的抽象。对于传统软件,人们总结出很多设计模式,比如工厂模式、观察者模式等等;类似的,在并发编程领域,人们也总结出很多模式,Actor就是其中一种。

图:从硬件角度看待服务端架构

游戏服务器需要承载很多玩家,意味着要尽可能的利用硬件资源。现代CPU都是多核CPU,多核CPU的特性表现在操作系统对多线程的处理能力上。


多进程/多线程的限制

理论也许枯燥,我们通过一个例子来说明,假如要开发一款如下图的斗地主游戏,而且预计玩家数量很多。

图:斗地主游戏示意图

传统方法是开启多个进程,每个进程处理多张桌子的逻辑。如果每个进程可以处理10张桌子,单台物理机开启100个进程就可以支撑3000名玩家。

但是,进程A和进程B究竟是什么东西?叫做桌子集合?它是计算机系统的概念,现实世界找不到对应的事物,就不容易理解。

图:传统的多进程模型,图片来自《百万在线》第1章

还有一种方法,让每个进程只处理一张桌子的逻辑,然而由于进程会占用很多系统资源,线程会占用的资源包括:

1、Linux下每个线程至少会占用的一“页”的物理内存,即4K。

2、CPU一次线程切换大概需要几微秒的时间,花销较大。

在普通的计算机,虽然操作系统理论上可以支持(近乎)无限的线程数,但若考虑性能,实际上只能支撑几百个。另外,多线程编程很复杂,需要考虑各种加锁问题。

这边产生了一个矛盾,操作系统抽象出来的进程、线程概念并不能完成符合对游戏世界的表达。

Actor模型的优势

从对游戏内容抽象的角度看,Actor模型的理念——万物皆Actor,能够充分表达游戏元素。

Actor模型由来已久,早在1973年,CarlHewitt提出Actor并发计算的理论模型;1991年爱立信推出的编程语言Erlang将Actor模型融入到语言里,并应用在通信领域;2009年前后,珠三角的一些游戏公司开始大规模的将Erlang语言应用于游戏领域。

优势一:对世界的表达

Actor模型是更进一步的面向对象,把世间万物都当做Actor对象。Actor可以代表一个角色、一只动物,也可以代表整个游戏场景。下图展示一种用Actor模型抽象的游戏世界,方括号代表Actor的类型,id代表Actor的标识,中间文本代表名称。它能够很好的表达世间万物。

图:万物皆Actor,图片来自《百万在线》第1章

优势二:并发性

由于各个Actor之间相互独立,意味着CPU可以并行的调度它们,符合CPU的运行特性。

Actor模型的调度,图片来自《百万在线》第11章

例子

Erlang、Skynet通过内部处理,让每个Actor都很轻量,在斗地主游戏的例子中,可让每张桌子独立分开,让游戏逻辑更符合现实世界。同时,Actor与多进程模型同样具备天然分布式属性,不同的桌子可以运行在不同的物理机上。

Actor模型提供了更多灵活性,图片来自《百万在线》第1章

分布式程序的前提是游戏逻辑能够被分割,而如果程序模型的灵活性较高,自然也就为业务逻辑的分割提供便利。从这个角度看,Actor并发模型给游戏业务的分割提供了灵活性。

总结

Actor模型既要符合硬件资源的运行特性,也能够符合对游戏内容的抽象;再加上页游时代广州一些游戏公司选择Erlang语言的机遇,使得Actor在游戏服务端领域有其用武之地。

本文摘编自《百万在线:大型游戏服务端开发》

《百万在线:大型游戏服务端开发》是基于C++与Lua语言开发游戏服务端的入门图书,内容涵盖Skynet引擎、CH底层开发、服务端架构设计等多个方面,全面展现网络游戏核心技术。

作者,罗培羽,现就职于广州四三九九公司技术研发中心,致力于深耕游戏技术、追逐前沿科技成果,一直进行不倦的探索。著有《Unity3D网络游戏实战》等计算机图书,所著图书被部分高校的软件工程专业选为教材。

扫码关注【华章计算机】视频号

每天来听华章哥讲书

更多精彩回顾

书讯 | 10月书讯(下) |  小长假我读这些新书

书讯 | 10月书讯(上) |  小长假我读这些新书

资讯 | 什么是图数据库?图数据库实践与创新浅析

书单 | 你们要的Java学习路线图来了

干货 | 数字化转型的1个目标,3大领域,6大因素和9个环节

收藏 | 两本书助你构建智能计算系统知识树

上新 | 【新书速递】从技术小白到开发大牛,这本实验教程带你手把手全栈开发!

赠书 | 【第75期】《失控玩家》引发的思考:我们究竟离真正的人工智能有多远?

点击阅读全文购买

游戏服务器为什么选用Actor模型,《百万在线》给你答案相关推荐

  1. 游戏服务器到底是什么?

    游戏服务器的定义      在线游戏当中,如果有'在线'则一定会跟随'游戏服务器'.但关于游戏服务器却并没有什么较好的评价,在致歉文中最常见的单词也是'服务器'.游戏进行不畅时也会经常说是'服务器不稳 ...

  2. 告诉你游戏服务器到底是什么

    第一部:游戏服务器的定义  在线游戏当中,如果有'在线'则一定会跟随'游戏服务器'.但关于游戏服务器却并没有什么较好的评价,在致歉文中最常见的单词也是'服务器'.游戏进行不畅时也会经常说是'服务器不稳 ...

  3. 告诉你游戏服务器到底是什么(连载)

    作者简介:裵铉稷,韩国Nettention公司首席执行官,毕业于韩国延世大学计算机工程与科学专业,自1995年开始在职于游戏公司,开发项目主要有<兔子和乌龟3D>.<Menticid ...

  4. 百万用户同时在线游戏服务器架构实现.doc 基于epoll 通信模型

    http://wenku.baidu.com/view/02033d0af78a6529647d53fc.html 百万用户在线网络游戏服务器架构实现 一.            前言 事实上100万 ...

  5. 云风skynet-如何用skynet手撕万人同时在线游戏丨actor模型详解

    如何用skynet手撕万人同时在线游戏 1. 多核并发编程 2. actor模型详解 3. 游戏实现 视频讲解如下,点击观看: 云风skynet-如何用skynet手撕万人同时在线游戏丨actor模型 ...

  6. 【云风skynet】详解skynet的多核高并发编程丨actor模型丨游戏开发丨游戏服务端开发丨多线程丨Linux服务器开发丨后端开发

    skynet中多核高并发编程给我们的启发 1. 多核并发编程 2. actor模型详解 3. 手撕一个万人同时在线游戏 视频讲解如下,点击观看: [云风skynet]详解skynet的多核高并发编程丨 ...

  7. 百万在线:大型游戏服务端开发

    进入手游时代,服务端技术也在向前演进.现代游戏服务端既要承载数以万计的在线玩家,又要适应快速变化的市场需求,因此,如何设计合适的架构就成了重中之重.服务端技术并不简单,作为服务端新人,全面掌握服务端技 ...

  8. 关于百万用户服务器架构能力(一)QQ游戏服务器架构

    QQ游戏于前几日终于突破了百万人同时在线的关口,向着更为远大的目标迈进,这让其它众多传统的棋牌休闲游戏平台黯然失色,相比之下,联众似乎已经根本不是QQ的对手,因为QQ除了这100万的游戏在线人数外,它 ...

  9. 百万用户级游戏服务器架构设计

    百万用户级游戏服务器架构设计 服务器结构探讨 -- 最简单的结构 所谓服务器结构,也就是如何将服务器各部分合理地安排,以实现最初的功能需求.所以,结构本无所谓正确与错误:当然,优秀的结构更有助于系统的 ...

最新文章

  1. pandas将满足某列的值挑出
  2. Windows版 mysql 5.7.16安装
  3. C#如何判断质数(转)
  4. python语法错误修改_python基础之错误、调试(异常处理)
  5. 起底《最后生还者2》:开发者们设计剧情应该规避的误区
  6. 14行代码AC——习题5-4 交换学生(Foreign Exchange, UVa 10763)——解题报告
  7. Xcode12快捷键配置
  8. Maven补全之生命周期(Lifecycle)
  9. jwt 长度_跟我一起学.NetCore之WebApi接口裸奔有风险(Jwt)
  10. 安装 Redis的Python客户端redis-py
  11. 教程 | 做一个自己专属的本地 BLAST 数据库
  12. c语言编程环境搭配,windows7系统搭建C语言开发环境的操作方法?
  13. [读书笔记]职场动物进化手册
  14. 最嗨的不是抽奖,看看人家公司的年会
  15. 制造行业mes使用说明书_mes系统操作手册完整版
  16. CuraEngine VS2017
  17. ggplot2 去掉网格
  18. 建筑行业为什么要数字化转型?
  19. 希尔排序(c语言实现)
  20. 系统重启后,VCS状态ADMIN_WAIT or STALE_ADMIN_WAIT

热门文章

  1. 强强联手 法大大电子合同金蝶云·苍穹版上线
  2. 第3选择-解决所有难题的关键思维,种下好的种子避免落入钻石交易
  3. CLI 什么是 command-line interface
  4. 前端历程(一)------初识前端
  5. 网站favicon图标(网站标志,显示在浏览器地址栏或标签上)
  6. 【html】svg标签
  7. 短语、直接短语、句柄、素短语
  8. Python验证“哥德巴赫猜想”
  9. 系统迁移性能问题解决
  10. 上海电气“星云智汇”工业互联网平台