文档章节

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

梦想游戏人
 梦想游戏人
发布于 2017/07/25 11:41
字数 829
阅读 48
收藏 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

 

© 著作权归作者所有

共有 人打赏支持
梦想游戏人
粉丝 34
博文 420
码字总数 119565
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Nexus Repository Manager 搭建私有docker仓库

Nexus Repository Manager 搭建私有docker仓库 2018年05月08日 14:44:23 阅读数:115 1.下载nexus3的镜像: docker pull sonatype/nexus3 2.使用镜像启动一个容器: docker run -d --name n...

linjin200
8分钟前
0
0
大数据技术的发展趋势

大数据领域已经涌现出了大量新的技术,它们成为大数据采集、存储、处理和呈现的有力武器。这些技术下一步将如何发展?它们之中哪些技术 将广为流行?又会诞生哪些新的技术? 技术趋向多样化,...

董黎明
10分钟前
1
0
谷歌浏览器插件入门示例

实现:任何网址实现图片下载和获取当前域名的cookies的json字符串。 图片下载是给小白用的,可以选中批量下载,获取cookies 是为了方便程序员调试用。 获取cookies: git地址: https://gite...

NLGBZJ
12分钟前
2
0
152. Maximum Product Subarray - LeetCode

Question 152. Maximum Product Subarray Solution 题目大意:求数列中连续子序列的最大连乘积 思路:动态规划实现,现在动态规划理解的还不透,照着公式往上套的,这个问题要注意正负,需要...

yysue
13分钟前
0
0
IDEA工具 jdk,tomcat,maven 配置

设置JDK、tomcat、maven的版本 一、JDK      如果下拉列表没有,SDKS ---> + ----> 选择下载的JDK目录 ---> APPLY OK    二、tomcat 三、Maven    四、生成 git 本地创库...

君千殇520
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部