文档章节

MMO服务端设计-记录1-基础框架

梦想游戏人
 梦想游戏人
发布于 2017/07/25 11:41
字数 829
阅读 50
收藏 0

https://git.oschina.net/dreamyouxi/MMOGame

1.网络库的选择

从原始的网络操作api写的话,会花费很多精力,选择一个成熟的网络库是一个很不错的方案。

可选择的底层网络库很多,asio libevent ace等。

对应 两种高性能I/O设计模式(Reactor/Proactor)

Proactor典型例子是:IOCP,asio

Reactor 典型例子是EPOLL,libevent

相比之下更倾向于asio的proactor模型,框架设计起来更简单,每次网络都是已经接收完成了,只需要对其逻辑处理即可。

但是服务器在linux下运行,asio 效率会折扣,期望是windows下开发,linux下运维,因此要压榨服务器的性能,跨平台的话一个网络库就不太可能限定起来。

无论是哪种方式,网络消息的分发都可以由一个中间件来完成,可以是master也可以是mgr,这样切换不同的网络库对于服务器本身逻辑的编写不会有什么改动,kbe是支持epoll select等 io机制,他的做法也是如此,网络事件都有一个distapcher统一分发该网络事件。

因此设计上就可以吧网络io层独立出来,代码看起来可能是这样

要切换到其他io 做一个适配层就可以了,

asio的适配

 

2.服务器并发模型

多进程单线程 or 多进程多线程 

关于并发基本模型主要有,多进程的单线程模型,多进程的多线程模型,单进程的多线程模型,这里的线程主要是指游戏逻辑执行的线程。多进程单线程模型,类似于kbe的架构,一个cell 或者base 游戏逻辑执行的线程只有一个,这样大大简化了代码开发难度,效率相对也较高,比如吧一个cell做场景服务器,多个cell协同合作,玩家跨场景就在cell之间切换。

数据迁移的速度就很关键了,这也是实现无缝跨地图的重要因素,。kbe的这种bigworld方式的数据迁移主要就用socket 共享内存 redis 等,但是这些速度都没那么快,能用内存就用内存。

根据上述缺陷,还有一种解决方案,就是把cell base 直接装进一个进程里,数据迁移就简单得多,加个锁 然后更改数据指针所有权即可。这样吧cell当做线程来处理,cellMgr 可以当做这个进程的主线程,负责维护处理cell,这样吧进程通信socket 更改为了直接的内存交互,

这样做的一个缺点是把这些cell cellmgr 限制在了一台物理机上,由于都在同一个物理机,从单台物理机限制了并发量,一个cell 宕机之后 如果处理不得当,会导致整个进程宕机,从而影响整个系统,再者局域网通信socket 都可以维持在1ms以内。 这点数据迁移代价节约的并不多,如果客户端也要loading的话,那还不如不做这种优化,PS:反正都要读条

 

TODO

 

© 著作权归作者所有

共有 人打赏支持
梦想游戏人
粉丝 36
博文 429
码字总数 122400
作品 0
成都
私信 提问
游戏服务端究竟解决了什么问题?

1.写在前面 既然是游戏服务端程序员,那博客里至少还是得有一篇跟游戏服务端有关的文章,今天文章主题就关于游戏服务端。写这篇博客之前也挺纠结的,一方面是因为游戏服务端其实不论架构上还...

Yomut
2016/07/01
31
0
网易游戏服务器开发框架--Pomelo

pomelo 是由网易开发的基于node.js开发的高性能、分布式游戏服务器框架, 也可作为高实时web应用框架。 Pomelo的应用范围 pomelo最适合的应用领域是网页游戏、社交游戏、移动游戏的服务端,开...

谢骋超
2012/10/23
84.2K
10
BossHX/xingo_demo

xingo_demo xingo mmo大型多人在线游戏 带unity3d 客户端的服务器端demo xingo框架需要切换到no reflect 分支 git checkout noreflectveriosn 该demo实现了mmo游戏的基础模块aoi(基于兴趣范围...

BossHX
2016/12/21
0
0
和某游戏猎头的对话

HI。 游戏猎头徐磊 16:00:34 请教你一个问题。。现在方便不? 午后の咖啡 16:00:45 在 游戏猎头徐磊 16:01:07 研发 高级软件工程师 项目描述:3D模拟经营网络游戏人生OL 开发工具:VS2005, F...

付翔
2010/04/07
0
0
Twitter zipkin 分布式跟踪系统的设计与实现

概述 Twitter的zipkin是一个致力于收集Twitter所有的分布式服务的时间数据的分布式跟踪系统。它提供了收集数据,和查询数据两大服务。系统的理论模型来自于Google Dapper 论文。Dapper这篇论...

tqyin
2016/09/28
3.8K
2

没有更多内容

加载失败,请刷新页面

加载更多

最重要的是做什么,而不是怎么做。

最重要的是做什么,而不是怎么做。 做什么是战略,怎么做是战术。将军下令说,天黑前拿下这座山头,这是战略。手下的士兵可以不知道为什么要拿下这座山头,还非得是天黑之前,但士兵必须知道...

我是菜鸟我骄傲
今天
1
0
w, vmstat, top, sar, nload命令查看系统状态信息

w/uptime 查看系统负载 cat /proc/cpuinfo 查看cpu核数 vmstat 监控系统状态,用法 vmstat 1,关键的几列: r, b, swpd, si, so, bi, bo, us, wa top 查看进程使用资源情况 top -c 显示详细的...

野雪球
今天
2
0
小白创建一个spring boot项目

进入 https://start.spring.io/

lilugirl
今天
3
0
Alibaba Java诊断利器Arthas实践--使用redefine排查应用奇怪的日志来源

背景 随着应用越来越复杂,依赖越来越多,日志系统越来越混乱,有时会出现一些奇怪的日志,比如: [] [] [] No credential found 那么怎样排查这些奇怪的日志从哪里打印出来的呢?因为搞不清...

hengyunabc
今天
2
0
home hosts

home hosts lwk@qwfys:~$ cat /etc/hosts127.0.0.1 localhost127.0.1.1 qwfys192.168.56.101vm600.qwfys.com39.108.212.91alpha1.ppy.com39.108.117.122alpha2.p......

qwfys
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部