对WOW服务端模拟器的思考
近来,对WOW现有的模拟器的看法又有了新的变化。
话说Ascent的性能相当不错,比起Mangos,我想这点异议不大吧。Trinity不加评论,没有实际测试。
Ascent接触了很久,运行机制也算比较了解,但是始终有个遗憾。
先简述一下结构:IOCP负责网络IO,多线程处理,加入封包队列。
主循环(单线程)更新每个会话,读取封包,并交给对应的handle函数(还是主循环的线程)。
周期完毕,检查如果花的时间短,等待再进入下个更新周期,超时了则马上进入下个周期。
问题就在此产生:
一、Ascent的线程池形同虚设,现有的线程池其实只是个Manager或Container,并没有发挥线程池的作用。线程池存在的理由就是避免为新的请求产生和销毁线程造成开销,循环利用线程。
二、分析一下服务器的工作类型。
按照《C++网络编程,卷一》,第五章,第一节中三种服务器类型的定义,循环、并发及反应式服务器。
Ascent是不折不扣的反应式服务器,同时也属于循环式,该类型结构最适合:1.短期服务;2.不经常运行的服务
“由于这样一种循环式结构,每一个请求处理都会在一个相对粗糙的层次上被串行化-例如,在应用程序和OS同步事件多路分离程序之间的接口上。但是,这种粗糙层次上的并发性不会充分利用主机平台上的某些处理资源和OS特性”—— 《C++网络编程,卷一》,5.1节
如此说来,Ascent性能并不佳,提升的空间还很大。
但事情没这么简单,性能无法单纯用架构衡量。考虑一个问题,如果多线程应答封包会发生什么。
我曾尝试将处理多线程化,双开wow进去跑,差不多10分钟左右,服务器就会发生死锁,屡试不爽。
原因很简单,作为网游服务器,需要同步的数据太多了,我们曾被unordered_XXX系列的boost库容器玩疯了。
完美的同步都会发生数据结构损坏,出现坏链表,简直匪夷所思。
推想下去,如果真的多线程并行处理,那么同步量会大到令人发指,几乎所有数据都需要同步,多到令我觉得干脆按类串行化得了。
真羡慕Windows的可重入API的设计,如果Win的API不是可重入的。。。
技术上讲,认为,寻求一种稳定的并行构架是模拟器的目标。
对WOW服务端模拟器的思考相关推荐
- 工作总结8:从安卓调整到服务端后的思考
前言 客户端开发的侧重点 后端开发的侧重点 浮躁的心 架构师之梦 跳出局限 总结 其他 Thanks 前言 距离写上篇博客已经有一个月了,年后由于岗位调整转去写后台,开发框架.开发模式的不同让我适应了 ...
- 非常好用的OPCUA服务端模拟器 - Prosys OPC UA Simulation Server
使用OPCUA进行开发非常有必要搞个模拟器,在必要的时候模拟一下具体的情况. 就像搞modbus开发的时候,要使用modsim一样. 这里有一个非常完善的opcua模拟器. prosys opc公司开 ...
- docker下编译mangoszero WOW60级服务端(三)
开始构建WOW服务端通用镜像 第二篇文章中准备工作环节已经从github拉取了mangosd源代码,这里我们就可以直接开始编写dockerfile并进行编译 (1) 进入mangos/wow60/ma ...
- docker下编译mangoszero WOW60级服务端(二)
开始搭建基于docker的mangoszero WOW服务端,我自己的操作系统是mac os,其他平台操作可以等价替换 1.准备工作 (1) 安装docker,参考docker官方文档,https:/ ...
- wow魔兽世界服务端主体结构
wow魔兽世界服务端主体结构 服务端主要由三大块组成,数据库.服务端逻辑.脚本.数据库用的MySQL,这里不是很关键暂且不说.脚本有自己的脚本引擎,简单的任务.战斗等都可以通过数据库配置相应条目来完成 ...
- 魔方APP项目-01-移动端开发相关概念、移动端自适配、元信息(meta)、开发准备、移动端项目搭建(模拟器调试)、APICloud(APICloud 前端框架,获取服务端API接口)
一.移动端开发相关概念 1.APP类型 ①.Native APP Native APP又称原生APP,就是我们平时说的手机应用软件. 原生APP 是针对IOS.Android.Windows等不同的手 ...
- 基于 azerothcore-wotlk 构建docker wow 335服务端
介绍 基于 azerothcore-wotlk 构建docker wow 335服务端 软件架构 Ubuntu 20.04 安装教程 1.下载 docker 环境 更换国内apt源,自行选择 清华源 ...
- Java服务端时区的几点思考
最近半年来开发的几个模块,涉及到了预定,检查,和查询.每个模块相同的都遇到了时间的处理,每次遇到的问题都不太一样.总结一下,避免以后走弯路. 时区概念 时区(Time Zone)是地球上的区域使用同一 ...
- iOS内购 - 服务端票据验证及漏单引发的思考
因业务需要实现了APP内购处理,但在过程中出现了部分不可控的因素,导致部分用户反映有充值不成并漏单的情况. 仔细考虑了几个付费安全上的问题,凡是涉及到付费的问题都很敏感,任何一方出现损失都是不能接受的 ...
最新文章
- GitHub分享《深度学习500问》优质资源
- 【直播预告】计算机视觉中数据增强原理和实践
- AndroidManifest.xml介绍
- 视图、存储函数、存储过程、触发器:MySQL系列之五
- python基础(part12)--模块
- 记一次线上服务假死排查过程
- Python3 爬虫实战 — 模拟登陆哔哩哔哩【滑动验证码对抗】
- 三议(巧用:before和inline-block伪元素解决)跨浏览器不定长宽,中心为基点,百分比定位~...
- rpm常用命令集合1
- DotNetNuke(DNN) 中查询所有管理员的SQL语句
- 安卓手机实现wifi中继、WiFi信号增强
- html语言中下拉表单,html实现下拉菜单
- 香橙派的使用入门无屏幕安装系统
- 笔记本电脑上没有Home和End键如何使用组合键?
- 201604-2 试题名称:	俄罗斯方块(100分)ccf认证
- 51单片机延时程序(以延时30ms为例)
- 九龙证券|大宗商品集体下挫,黄金一枝独秀,纳指领跑全球股市
- 支付宝开发流程及注意事项
- 解析四种大数据文件格式
- 惯性导航的定位原理是什么?
热门文章
- 古典与现代密码学的常见破解
- 野兔百科系统网站V5.1.1中文版更新
- 内网代理和wifi的切换
- 水晶报表文本垂直居中显示
- 计算机学院类脑计算,类脑计算丨CNCC技术论坛
- c语言小程序 万年历,C语言实现万年历小程序
- mysql时间函数 date_format () 、date_sub()、YEERWEEK()、WEEKDAY(),另附本周 上周 本月 上月 本年等日期写法
- 采用RTL-SDR实现软件无线电
- xftp6设置默认打开文件的程序_xftp6如何使用,教你几个步骤了解xftp6如何使用
- 一阶系统开环传递函数表达式_15. 闭环系统的频域性能指标